使用CMake在构建后运行一个C++程序

8
我有一个用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的了解还不足以进行此设置。

1个回答

16

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

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


1
以上两个命令都可以被一个单独的add_custom_target()替代,该命令带有一个COMMAND关键字,并且可以执行任何任务,既是“驱动目标”,也是任务调用者本身(同样,LicenceStamper将成为必需的依赖目标)。在这种情况下,add_custom_command()是多余的。 - bloody

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接