2012-06-18 60 views
3

我有C++項目使用cmake。我希望基於git提交進行版本控制(意思是提供獨特的./myapp --version輸出)。手動它就像自定義腳本輸出爲定義宏

gcc ... -DVERSION=$(git rev-list|wc -l) 

並使用VERSION宏,如果在代碼中定義。

這個按預期工作。但是,我應該如何將它寫入CMakeLists.txt(爲簡單起見,我們使用echo)?我應該如何逃避它?

add_definitions(-DVERSION="$(echo 1)") 
+0

與[此問題]相似,但不完全相同(http://stackoverflow.com/questions/1435953/how-can-i-pass-git-sha1-to-compiler-as-definition-using-cmake) – Fraser

回答

1

在cmake的2.8.8,您可以:

add_definitions(demo -D`echo VERSION=\\`git rev-list HEAD|wc -l\\``) 

和:

int main(int argc, char *argv[]) { 
    printf("Version: %d", VERSION); 

要爲編譯:

/usr/bin/gcc -std=c99 demo -D`echo VERSION=\`git rev-list HEAD|wc -l\`` -o CMakeFiles/demo.dir/src/demo.c.o -c /home/doug/projects/libar/src/demo.c 

和結果

build$ ./demo 
Version: 88 

這似乎是你真正想要的。

+0

太好了,按我的意思工作,非常感謝! – Miso