【发布时间】:2011-07-20 02:24:23
【问题描述】:
我正在使用 CMake 构建我的 C++ 项目,它有多个可执行文件和一个库(同一个项目的所有部分)。一切正常,但是我的一个可执行文件是创建一些库类的代码生成器。我已经完成了所有的生成工作,但是在构建库之前无法弄清楚如何调用这个可执行文件(codegen)。我在Linux环境中。希望有人能回答这个问题。
【问题讨论】:
我正在使用 CMake 构建我的 C++ 项目,它有多个可执行文件和一个库(同一个项目的所有部分)。一切正常,但是我的一个可执行文件是创建一些库类的代码生成器。我已经完成了所有的生成工作,但是在构建库之前无法弄清楚如何调用这个可执行文件(codegen)。我在Linux环境中。希望有人能回答这个问题。
【问题讨论】:
在CMakeLists.txt:
首先,定义你的可执行文件:
add_executable(marks-code-generator gen.cpp)
然后,定义一个自定义命令来生成源代码:
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)
VERBATIM 选项可确保正确完成特定于平台的转义。 COMMENT 将在 make 执行时打印出来,给出类似 [ 66%] here we go! 的内容。
最后,在你的真实程序的源代码列表中命名你生成的源代码:
add_executable(some-program generated.cpp generated.hpp non-generated.cpp foo.cpp)
【讨论】:
make,他们不使用automake,我不相信他们使用CMake。你有什么理由不能在顶级CMakeLists.txt 中完成这一切吗?如果它太大,请使用include。您仍然需要输出到文件。 add_custom_command 中的 OUTPUT 行只是告诉 CMake 您正在生成哪些文件(因为它无法自行解决),所以请继续使用 ofstream 或其他任何内容来生成您的标头和源代码。