5

我有一个用C++编写的应用程序,我使用CMake来构建和发布二进制文件。使用CMake在生成后运行C++程序

我想让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没有足够的了解来完成此设置。

回答

13

你说你想在编译后运行文件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 
) 

自定义命令将运行可执行文件(和第一盖了,如果需要的话)。自定义目标将驱动自定义命令 - 它取决于命令的输出,所以当目标生成时,它将需要构建它的依赖关系,导致自定义命令运行。