• CMake如何执行shell命令


    摘要:execute_process

    我在cmake编译后想执行一些特定的shell命令(执行、lcov收集代码覆盖报告等),我又不想写到XX.sh的shell脚本中,如何直接通过CMake执行shell命令呢?

    在网上翻江倒海了一下,找到了一个老外写的cmake脚本,参考他,自己写了下,终于实现了我的目标,主要是用ADD_CUSTOM_TARGET和EXECUTE_PROCESS来实现。具体实现我还是用经典的hello world来解释下:

    在你的CMakeLists.txt中,加入以下代码:

    SET(RUN_HELLO_WORLD_COMMAND_FILE "${CMAKE_BINARY_DIR}/run-hello-world.cmake")
    FILE(WRITE ${RUN_HELLO_WORLD_COMMAND_FILE }
    "SET(ENV{LANG en}) ")

    FILE(APPEND ${RUN_HELLO_WORLD_COMMAND_FILE }
    "EXECUTE_PROCESS(COMMAND "./hello-world" WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/bin") ")

    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}") ")

     

    ADD_CUSTOM_TARGET(run-hello-world
    COMMAND ${CMAKE_COMMAND} ARGS -P ${RUN_HELLO_WORLD_COMMAND_FILE }
    DEPENDS hello-world)

     

    ${CMAKE_COMMAND}其实就是cmake,

    上面我先在CMAKE_BINARY_DIR加一个文件叫run-hello-world.cmake,我在这个FILE里面做了两件事,1.执行hello-world 2. 用gcovr生成了html报告,如果写成shell脚本的话就是:

    ./hello-world

    gcovr --html -r "/media/helloworld" --output "/media/helloworld/build"

    OK,上面已经在你的CMakeLists.txt中加好了上述语句,那如何使用呢?请看下面:

    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吧。

    希望对各位看官能有帮助!

     

    参考链接:https://code.cor-lab.de/projects/rsc/repository/revisions/master/entry/cmake/Modules/EnableCoverageReport.cmake


    转自:http://www.cnblogs.com/jackyim/p/3770508.html

  • 相关阅读:
    JQuery替换空字符串和正则表达式校验时间格式
    数据库升级,给某张表增加字段,防止重复升级时sql脚本报错
    将jar包安装到本地repository中
    springCloud集成常用组件(持续更新)
    记一次springboot配置事务@transactional失效的事故
    分布式锁实现(Redis和zookeeper)
    springCloud集成zookeper
    zookeeper学习相关
    springboot集成activeMq
    springboot集成redis
  • 原文地址:https://www.cnblogs.com/catkins/p/5270438.html
Copyright © 2020-2023  润新知