将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