我想在CMake中解析/处理传递的控制台参数,所以如果我在控制台中运行它:
cmake -DCMAKE_BUILD_TYPE=Release -DSOME_FLAG=1 ..
Run Code Online (Sandbox Code Playgroud)
我想获得-DCMAKE_BUILD_TYPE=Release和-DSOME_FLAG=1来自这里面的CMake的脚本(通过了所有其他参数)并保存它们的地方.
我想要它的原因是通过自定义CMake脚本(后面调用execute_process(cmake <something>))传递所有参数,例如
cmake -DCMAKE_BUILD_TYPE=Release -P myscript.cmake
Run Code Online (Sandbox Code Playgroud)
还有CMAKE_ARGC其中包含传递给CMake的(由空格分开)变量数量变量,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()
Run Code Online (Sandbox Code Playgroud)
(回答我自己的问题,在SO中找不到类似的东西,也许它会帮助某人)
| 归档时间: |
|
| 查看次数: |
612 次 |
| 最近记录: |