在Makefile中,这可以通过以下方式完成:
g++ -DGIT_SHA1="`git log -1 | head -n 1`" ...
Run Code Online (Sandbox Code Playgroud)
这非常有用,因为二进制文件知道确切的提交SHA1,所以它可以在segfault的情况下转储它.
我如何用CMake实现同样的目标?
假设我有时在 Linux 上使用 cmake 2.8 编译一段代码。
我更改了一个文件“my_changed_file”,运行 cmake,并且只构建了这个文件。到目前为止,一切都很好。
现在我想提交这个:
git add my_changed_file
git commit
Run Code Online (Sandbox Code Playgroud)
如果我再次运行 cmake,我希望什么也不会发生。但我的所有文件都被重新编译,尽管我没有触及任何东西!当我执行 ls -l 时,时间戳似乎未受影响。
我确实有这些行:
execute_process(
COMMAND git describe --abbrev=8 --dirty --always --tags
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE GIT_CODE_VERSION
OUTPUT_STRIP_TRAILING_WHITESPACE
)
add_definitions("-DCODE_VERSION=${GIT_CODE_VERSION}")
Run Code Online (Sandbox Code Playgroud)
但它只影响文件main.cpp
怎么了 ?
谢谢