gpt4 book ai didi

c++ - 将 Git 提交哈希读入 C++ 时出错

转载 作者:行者123 更新时间:2023-11-30 03:14:34 27 4
gpt4 key购买 nike

我正在尝试将 Git 提交哈希读取到 C++ 应用程序中。使用以下 CMakeList 文件,我得到了正确的提交哈希。

CMakelist

  FIND_PACKAGE(Git)
IF(GIT_FOUND)
EXECUTE_PROCESS(
COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
OUTPUT_VARIABLE COMMIT
OUTPUT_STRIP_TRAILING_WHITESPACE)
MESSAGE( STATUS "Commit : ${COMMIT}" )
ELSE(GIT_FOUND)
SET(COMMIT 0)
ENDIF(GIT_FOUND)

set(yada "${COMMIT}")
MESSAGE("lkpoopkpoef".${yada})
add_definitions("-D_GIT_COMMIT_HASH=${yada}")

但是,当我尝试在以下函数中读取 C++ 中的值时,出现错误。

主要.cpp

std::string getGitCommit()
{
#ifdef _GIT_COMMIT_HASH
return _GIT_COMMIT_HASH;
#endif
return "unavailable";
}

In function ‘std::__cxx11::string getGitCommit()’: :0:18: error: ‘d2cdfd2’ was not declared in this scope

d2cdfd2 是提交哈希。

我指的是

  1. http://xit0.org/2013/04/cmake-use-git-branch-and-commit-details-in-project/
  2. How to read a CMake Variable in C++ source code

我试图避免创建另一个文件来存储提交哈希,并希望直接从 CMakeList 中读取它。

我正在使用 catkin_make 在 Ubuntu 16.04 上构建应用程序

我在这里做错了什么?

最佳答案

散列实际上不是字符串。即使是编译器错误也会告诉您这一点。

您需要使用 stringize 运算符 (#)。来自 Stringizing operator in C/C++ :

#define STRINGIFY_(x) #x
#define STRINGIFY(x) STRINGIFY_(x)

#ifdef _GIT_COMMIT_HASH
return STRINGIFY(_GIT_COMMIT_HASH);
#endif

另请注意,由于此函数始终返回字符串文字,因此返回类型可能更适合 const char* 而不是 std::string。尽管这两种方式都完全有效。

还有一点是,如果哈希不可用,您的编译器可能会警告您第二个return 不可访问。如果您不希望这种情况发生,请使用 #else 指令:

#ifdef _GIT_COMMIT_HASH
return STRINGIFY(_GIT_COMMIT_HASH);
#else
return "unavailable";
#endif

关于c++ - 将 Git 提交哈希读入 C++ 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57700834/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com