2012-12-04 8 views
5

他のcmakeファイルからスクリプトモード(-P)でcmakeファイルを呼び出すにはどうすればよいのですか?この "cmake子"はその親のすべての変数を知っていますか?子供が必要とする変数がたくさんある場合、私は多くの-Dオプションを書く必要があり、避けたいのです。スクリプトモードでCMakeファイルを継承する

例:

// CMakeLists.txt 
cmake_minimum_required(VERSION 2.8) 

set(teststr "Hello World!") 

add_custom_command(test 
    ${CMAKE_COMMAND} -Dteststr=${teststr} -P test.cmake 
) 

// test.cmake 
message("${teststr}") 

$ cmake . 
$ make test 
Hello world! 
Built target test 

作品罰金!しかし、 "-Dteststr" なし:もちろん

// CMakeLists.txt 
cmake_minimum_required(VERSION 2.8) 

set(teststr "Hello World!") 

add_custom_command(test 
    ${CMAKE_COMMAND} -P test.cmake 
) 

// test.cmake 
message("${teststr}") 

$ cmake . 
$ make test 

Built target test 

、-Dオプションを指定せずに、 "teststr" 変数は、test.cmakeで、設定解除され、これにより、出力は空です。

"heritage mode"などでtest.cmakeを呼び出すオプションはありますか?

答えて

2

私が知っているこれを行うには特に簡単な方法はありません。あなたのtest.cmakeでこれを別のファイルに親CMakeLists.txtにおける現在のすべての変数を書き、その後includeでき

# CMakeLists.txt: 
cmake_minimum_required(VERSION 2.8) 
set(teststr "Hello World!") 
set(CacheForScript ${CMAKE_BINARY_DIR}/CMakeCacheForScript.cmake) 
file(WRITE ${CacheForScript} "") 

get_cmake_property(Vars VARIABLES) 
foreach(Var ${Vars}) 
    if(${Var}) 
    string(REPLACE "\\" "\\\\" ${Var} ${${Var}}) 
    endif() 
    file(APPEND ${CacheForScript} "set(${Var} \"${${Var}}\")\n") 
endforeach() 

add_custom_target(test ${CMAKE_COMMAND} -P ${CMAKE_SOURCE_DIR}/test.cmake) 


# test.cmake 
include(${CMAKE_BINARY_DIR}/CMakeCacheForScript.cmake) 
message("${teststr}") 
2

あなたは引数を渡すことができますあなたがcmake -Pと呼ぶスクリプトに を呼び出す場合:

cmake -P <script-file> <arg3> <arg4> <arg5> ... 

を、その後、変数CMAKE_ARGCCMAKE_ARGV0CMAKE_ARGV1は、...スクリプトのために利用できるようになります。 CMAKE_ARGCおよびCMAKE_ARGV0のドキュメントを参照してください。

もう1つの方法は、スクリプト以外のcmakeコマンドと同様に、変数を定義することです。一つのことがあります:あなたが-P前に変数を定義する必要があります。また

cmake -DVAR=VALUE -DFOO=BAR -P <script-file> <arg5> <arg6> ... 

、スクリプト・ファイルの後に引数の番号はそれに応じてシフトすることになるではないということ。