CMake编译时生成源

Fer*_*eak 3 c++ cmake

我跟CMake有以下情况:

  1. 它必须构建两个应用程序:

    一个.发电机

    something_else

  2. 发电机是没有任何幻想,几CPP文件链接在一起

  3. something_else是:

    一个.一些"正常"的CPP文件

    湾 生成我必须链接的CPP/h文件.这些CPP文件由生成器生成

发电机在配置阶段配置了一些选择,这取决于这些选项生成的文件的内容是不同的.

在这里,我得到一个错误:如果我在指定的所有文件(生成的,而不是)add_applicationsomething_else配置阶段就可以了扼流圈,因为它不能找到生成的文件......显然是因为他们还没有产生,因为发电机是还没有建成并执行.

所以问题是:这可能使用CMake吗?如果有,怎么样?

Rei*_*ica 9

对的,这是可能的.您可以通过提供自定义命令来生成文件,以便CMake了解如何生成它们.这是一个例子:

add_executable(generator gen1.cpp gen2.cpp)

add_custom_command(
  OUTPUT generated_file1.cpp generated_file2.cpp
  COMMAND generator -options --go here
  COMMENT "Running generator"
  VERBATIM
)

add_executable(something_else
  fixed1.cpp
  fixed2.cpp
  generated_file1.cpp
  generated_file2.cpp
)
Run Code Online (Sandbox Code Playgroud)

这样,CMake就会知道文件是生成的,并且还会引入正确的依赖关系 - make something_else在一个干净的构建dir中输入将构建generator,然后运行它,然后构建something_else.