【问题标题】:Use CMake to run a C++ program post-build使用 CMake 在构建后运行 C++ 程序
【发布时间】:2013-09-23 14:19:31
【问题描述】:

我有一个用 C++ 编写的应用程序,我使用 CMake 构建和发布二进制文件。

我想让 CMakeLists.txt 脚本编译并运行一个 CPP 文件,该文件用于在为应用程序构建二进制文件后对许可证文件进行时间戳和加密。我见过运行execute_process 命令的示例,例如:

execute_process(COMMAND "gcc -o foo foo.cpp"
                WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
execute_process(COMMAND "./foo"
                WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
                RESULT_VARIABLE MY_FOO_VAR)

我正在使用 Visual Studio 2010 在 Windows 上进行构建。问题是我不确定如何让 CMake 在 VS 的构建过程中运行程序。我希望构建操作中的最后一件事是许可证文件时间戳,但我对 VS 或 CMake 的了解还不够,无法进行设置。

【问题讨论】:

    标签: c++ visual-studio-2010 cmake build-process post-build-event


    【解决方案1】:

    您说您希望在构建之后运行文件execute_process() 在 CMake 时运行,而不是在构建时运行。你要找的是add_custom_command():

    add_executable(LicenseStamper stamper.cpp)
    
    add_custom_command(
      OUTPUT stamped_file.lic
      COMMAND LicenseStamper any other arguments
      DEPENDS any/dependency.file
      COMMENT "Stamping the license"
      VERBATIM
    )
    
    add_custom_target(
      StampTheLicense ALL
      DEPENDS stamped_file.lic
    )
    

    自定义命令将运行可执行文件(并在必要时先构建它)。自定义目标将驱动自定义命令 - 它依赖于命令的输出,因此在构建目标时,将需要构建其依赖项,从而导致自定义命令运行。

    【讨论】:

    • 以上两个命令都可以用一个add_custom_target() 替换,它带有一个COMMAND 关键字,可以发出任何任务,既是“驱动目标”又是任务调用者本身(LicenceStamper 也将是一个必需的依赖目标)。 add_custom_command() 在这种情况下是多余的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 2013-02-13
    • 2019-03-21
    • 2019-02-04
    相关资源
    最近更新 更多