我可能只是将整个包含目录复制到我的构建树中并使其可用。
一个不错的方法是使用file(GLOB_RECURSE ...)
在包含文件夹中收集文件列表,然后使用configure_file(<input> <output> COPYONLY)
将它们复制到构建树。
通过使用configure_file
,构建树中的文件仅在需要时被替换。这意味着重新运行 CMake 不会自动使这些文件对构建工具显得过时,从而避免不必要的重新编译。
set(ForeignLibName foreignLib-1.5.0_build123456)
set(ForeignLibRoot ${CMAKE_SOURCE_DIR}/${ForeignLibName})
file(GLOB_RECURSE IncludeFiles RELATIVE ${ForeignLibRoot} ${ForeignLibRoot}/*)
foreach(IncludeFile ${IncludeFiles})
configure_file(${ForeignLibRoot}/${IncludeFile}
${CMAKE_BINARY_DIR}/${ForeignLibName}/foreignLib/${IncludeFile}
COPYONLY)
endforeach()
include_directories(${CMAKE_BINARY_DIR}/${ForeignLibName})
这应该允许您执行以下操作:
#include "foreignLib/include/lib.h"
当您更新外部库时,您必须确保您也更新了 CMakeLists.txt,以便 CMake 在您下次构建时重新运行。更新 CMakeLists.txt 应该只涉及更改单行set(ForeignLibName ...)
。