我有一個項目,我正在使用cmake來幫助構建。該假設項目是/home/proj
和build目錄是/home/proj-build
cmake中的多個命令execute_process
的/home/proj
目錄是一個Git倉庫有一些標籤,我想最近的標籤納入代碼時,它被建造,以便二進制知道它是什麼版本。
在我CMakeLists.txt
文件我在設置部分以下節:
set(CMAKE_BUILD_TYPE None)
message(${CMAKE_CURRENT_SOURCE_DIR})
execute_process(COMMAND cd ${CMAKE_CURRENT_SOURCE_DIR} && exec git describe --abbrev=0 --always OUTPUT_VARIABLE GIT_VERSION)
message("${GIT_VERSION}")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D__GIT_VERSION=\\\"${GIT_VERSION}\\\"")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__GIT_VERSION=\\\"${GIT_VERSION}\\\"")
的問題是,在execute_process
的複合命令顯然返回的版本爲空字符串。我必須以某種方式從存儲庫目錄中運行git describe
命令,但它與代碼所在的構建目錄不同。
我怎樣才能讓make進程在適當的目錄中執行適當的git命令,即使是從構建目錄中調用時也是如此?另外,我怎樣才能讓cmake
從複合命令中獲得輸出,就像我通常在shell中預期的那樣?
事情我已經試過
我試圖環繞的建議,以運行在一個子shell命令here帶括號的複合命令,但輸出似乎不退還到父shell。
This link表明execute_process
可與多種COMMAND
調用運行,但似乎從第一個stdout
通過管道被輸送到下stdin
,這樣就不會產生期望的結果。
我也嘗試在execute_process
結構中明確使用sh -c
來使用shell。我不確定我是否完全理解了這種嘗試的結果,但我無法獲得'
我需要在這種情況下在execute_process
內正確地逃脫。