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
时的导出文件。它不会在正常的构建任务序列中发生。
答案 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
构建。