c++ - 使用 CMake 在构建后运行 C++ 程序

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

我有一个用 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 的了解还不够多,无法进行此设置。

最佳答案

你说你想在构建后运行文件。 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
)

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

关于c++ - 使用 CMake 在构建后运行 C++ 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18961650/

相关文章:

C++ strtok问题

c++ - 使用 pair 创建 priority_queue,当第一个元素相等时,第一个元素的排序为 "<",第二个元素的排序为 ">"

c++ - 从另一个 Visual Studio C++ 项目读取数组?

c++ - 函数调用期间未正确保存 ESP 的值

cmake - 如何在 CMake 中将字符串拆分为多行?

c++ - 在头文件中初始化常量特征矩阵

c++ - 如何确定 C++ 中每个核心的 CPU 消耗

c++ - Unresolved external 错误

c++ - 用于模块化 C++ 框架的 CMAKE

c++ - 如何为单个头文件设置不同的编译器选项?