CMake如何执⾏shell命令
我在cmake编译后想执⾏⼀些特定的shell命令(执⾏、lcov收集代码覆盖报告等),我⼜不想写到XX.sh的shell脚本中,如何直接通过CMake执⾏shell命令呢?
在⽹上翻江倒海了⼀下,到了⼀个⽼外写的cmake脚本,参考他,⾃⼰写了下,终于实现了我的⽬标,主要是⽤
ADD_CUSTOM_TARGET和EXECUTE_PROCESS来实现。具体实现我还是⽤经典的hello world来解释下:
在你的中,加⼊以下代码:
SET(RUN_HELLO_WORLD_COMMAND_FILE "${CMAKE_BINARY_DIR}/ake")
FILE(WRITE ${RUN_HELLO_WORLD_COMMAND_FILE }
"SET(ENV{LANG en})\n")
FILE(APPEND ${RUN_HELLO_WORLD_COMMAND_FILE }
"EXECUTE_PROCESS(COMMAND \"./hello-world\" WORKING_DIRECTORY \"${CMAKE_BINARY_DIR}/bin\")\n")
FILE(APPEND ${RUN_HELLO_WORLD_COMMAND_FILE }"EXECUTE_PROCESS(COMMAND \"${GCOVR_EXECUTABLE}\" --html -r \"${CMAKE_SOURCE_DIR}\" --output \"${COVERAGE_HTML_FILE}\" WORKING_DIRECTORY
\"${CMAKE_BINARY_DIR}\")\n")
ADD_CUSTOM_TARGET(run-hello-world
COMMAND ${CMAKE_COMMAND} ARGS -P ${RUN_HELLO_WORLD_COMMAND_FILE }
DEPENDS hello-world)
${CMAKE_COMMAND}其实就是cmake,
cmake如何使用上⾯我先在CMAKE_BINARY_DIR加⼀个⽂件叫ake,我在这个FILE⾥⾯做了两件事,1.执⾏hello-world 2. ⽤gcovr ⽣成了html报告,如果写成shell脚本的话就是:
./hello-world
gcovr --html -r "/media/helloworld" --output "/media/helloworld/build"
OK,上⾯已经在你的中加好了上述语句,那如何使⽤呢?请看下⾯:
1.编译 cmake .. -G"Unix Makefiles" -DCMAKE_BUILD_TYPE=Debug (..表⽰源码位置为上⼀层路径,这个根据给位看官具体情况⽽定)
2.编译你的target(这⾥是hello-world), cmake --build . --use-stderr --target hello-world
3.编译⾃⼰加的target(run-hello-world),cmake --build . --use-stderr --target run-hello-world
OK,执⾏完上⾯⼀句cmake后,cmake就会去执⾏hello-world,得到代码覆盖率报告,也算是更够满⾜我原先想在cmake中执⾏shell脚本的需求。
ADD_CUSTOM_TARGET,EXECUTE_PROCESS等,各位看官⾃⾏百度或Google吧。
希望对各位看官能有帮助!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论