在构建库之前,让CMake在项目中执行目标

Mar*_*ark 11 c++ build cmake

我正在使用CMake构建我的C++项目,它有多个可执行文件和一个库(同一项目的所有部分).一切正常,但我的一个可执行文件是一个代码生成器,它创建了一些库类.我已经让所有代都工作了但是在构建库之前无法弄清楚如何调用这个可执行文件(codegen).我在Linux环境中.希望有人能回答这个问题.

Jac*_*lly 17

CMakeLists.txt:

首先,定义可执行文件:

add_executable(marks-code-generator gen.cpp)
Run Code Online (Sandbox Code Playgroud)

然后,定义自定义命令以生成源:

add_custom_command(OUTPUT generated.cpp generated.hpp
                   COMMAND marks-code-generator ARGS args here maybe
                   MAIN_DEPENDENCY input-file.in
                   DEPENDS marks-code-generator
                   COMMENT here we go!
                   VERBATIM)
Run Code Online (Sandbox Code Playgroud)

该选项VERBATIM可确保正确完成特定于平台的转义.在COMMENT将被打印出来让执行,让类似[ 66%] here we go!.

最后,将您生成的源命名为真实程序的源列表:

add_executable(some-program generated.cpp generated.hpp non-generated.cpp foo.cpp)
Run Code Online (Sandbox Code Playgroud)