2

渡されたコンソールパラメータをCMakeで解析/処理したいので、コンソールでこれを実行すると:

cmake -DCMAKE_BUILD_TYPE=Release -DSOME_FLAG=1 ..

CMake スクリプト (および渡された他のすべてのパラメーター) から-DCMAKE_BUILD_TYPE=Releaseandを取得し、それらをどこかに保存したいと考えています。-DSOME_FLAG=1

私がそれを望む理由は、すべてのパラメーターをカスタム CMake スクリプト (後で呼び出すexecute_process(cmake <something>))を介して渡すことです。

cmake -DCMAKE_BUILD_TYPE=Release -P myscript.cmake
4

1 に答える 1

7

CMake に渡されるCMAKE_ARGC変数の量 (空白で区切られた) を含む variable と、実際の値を含むCMAKE_ARGV0, CMAKE_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でそのようなものを見つけられませんでした、多分それは誰かを助けるでしょう)

于 2013-10-30T15:13:36.483 に答える