CMake如何在依赖项目构建之前创建项目导出头文件

时间:2018-02-13 09:53:55

标签: cmake

proj1/proj2/中有2个项目。 proj1是一个库,proj2是使用proj1的可执行文件。

dir树就像:

repo/
  include/
  proj1/
    hello.h
    hello.cpp
  proj2/
    testApp.cpp // it #include hello.h

CMake将proj1然后proj2。我希望CMake在构建hello.h时将include/复制到proj1,如果文件未更新,则proj2构建将成功。

目前我只知道使用install()

install(FILES hello.h DESTINATION $ENV{REPO_ROOT_DIR}/include)

但是,这只是make install时的导出文件。它不会在正常的构建任务序列中发生。

1 个答案:

答案 0 :(得分:4)

永远不要在构建期间写入源树。

CMake应该用于源外构建,所以即使源位于只读文件系统上,我也应该能够构建。

正如所指出的那样in the comments,在标题已经存在并且proj1的构建未改变的简单情况下,您可以target_include_directories将其文件夹proj2改为target_include_directories并且完成了。

如果是,出于某种原因,不适用并且您确实需要将文件复制到其他位置,则应将其复制到PROJECT_BINARY_DIR下的文件夹,然后proj2。根据您需要可用于复制文件的信息,您可以在CMake配置时执行复制(使用例如。  configure_file)或在构建时使用add_custom_command。在后一种情况下,您需要确保相应地为依赖项建模,以便在复制文件之前不允许accountdetails.json构建。