将Git提交哈希读入C+;时出错+; 我试图读取Git提交哈希到C++应用程序中。使用下面的CMakeList文件,我得到了正确的提交散列
克马克主义者将Git提交哈希读入C+;时出错+; 我试图读取Git提交哈希到C++应用程序中。使用下面的CMakeList文件,我得到了正确的提交散列,c++,git,cmake,C++,Git,Cmake,克马克主义者 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) MESS
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++中的值时,我会得到一个错误。 main.cpp
std::string getGitCommit()
{
#ifdef _GIT_COMMIT_HASH
return _GIT_COMMIT_HASH;
#endif
return "unavailable";
}
在函数“std::uu cxx11::string getGitCommit()”中:
:0:18:错误:“d2cdfd2”未在此作用域中声明
d2cdfd2是提交散列
我指的是
我试图避免创建另一个文件来存储提交散列,并希望直接从CMakeList读取该文件
我正在使用catkin_make在Ubuntu 16.04上构建应用程序
我做错了什么?哈希实际上不是字符串。甚至编译器错误也在告诉您这一点 您需要使用stringize操作符(
#
)。
发件人:
还请注意,由于此函数始终返回字符串文字,因此返回类型可能更适合为const char*
,而不是std::string
。尽管这两种方式都完全有效
另一点是,如果哈希不可用,编译器可能会警告您第二个返回值不可访问。如果不希望发生这种情况,请使用#else
指令:
#ifdef _GIT_COMMIT_HASH
return STRINGIFY(_GIT_COMMIT_HASH);
#else
return "unavailable";
#endif
谢谢你,帕迪。答案给了我一个编译错误“代码中的杂散”。编辑答案来解决这个问题。啊,当然,我为一个平庸的答案道歉。很高兴你能纠正它。
#ifdef _GIT_COMMIT_HASH
return STRINGIFY(_GIT_COMMIT_HASH);
#else
return "unavailable";
#endif