2013-10-30 12 views
1

我想分析中的CMake /過程中通過控制檯的參數,所以,如果我在控制檯運行如下命令:枚舉控制檯參數(ARGV)中的CMake

cmake -DCMAKE_BUILD_TYPE=Release -DSOME_FLAG=1 .. 

我想獲得這裏面的-DCMAKE_BUILD_TYPE=Release-DSOME_FLAG=1 CMake腳本(以及其他每個參數傳遞)並將它們保存在某處。

我想要它的原因是通過自定義CMake腳本(後面調用execute_process(cmake <something>))來傳遞所有參數,例如,

cmake -DCMAKE_BUILD_TYPE=Release -P myscript.cmake 
+0

好問題(和答案)。但是,你爲什麼要這樣做?遇到可以處理任何參數的CMakeLists並且很可能不會與CMake-GUI一起工作,這是非常罕見的。 –

+0

謝謝。我這樣做是因爲我想通過自定義CMake腳本(它調用'execute_process(cmake )'後面)來傳遞所有參數。 'cmake -DCMAKE_BUILD_TYPE =發佈-P myscript.cmake' – dreamzor

回答

3

CMAKE_ARGC變量包含(由空格分開)傳遞給CMake的變量量,並且CMAKE_ARGV0CMAKE_ARGV1,...其中包含實際值。

對於C++語言來說,第一個(零)變量包含您調用的命令(在這種情況下爲cmake)是很常見的,所以我們將需要除CMAKE_ARGV0之外的所有內容。讓我們做一個簡單的循環,那麼:

set(PASSED_PARAMETERS "") # it will contain all params string 
set(ARG_NUM 1) # current index, starting with 1 (0 ignored) 

# you can subtract something from that if you want to ignore some last variables 
# using "${CMAKE_ARGC}-1" for example 
math(EXPR ARGC_COUNT "${CMAKE_ARGC}") 

while(ARG_NUM LESS ARGC_COUNT) 
    # making current arg named "CMAKE_ARGV" + "CURRENT_INDEX" 
    # in CMake like in Bash it's easy 
    set(CURRENT_ARG ${CMAKE_ARGV${ARG_NUM}}) 

    message(STATUS "Doing whatever with ${CURRENT_ARG}") 

    # adding current param to the list 
    set(PASSED_PARAMETERS ${PASSED_PARAMETERS} ${CURRENT_ARG})   

    math(EXPR ARG_NUM "${ARG_NUM}+1") # incrementing current index 
endwhile() 

(回答我的問題,在SO沒有發現這樣的事情,也許它會幫助別人)