我们将单独的存储库包含在一个通用的CMake超级项目中(它只是按正确的依赖顺序add_subdirectory()
每个存储库文件夹(。
不同的存储库都依赖export((来输出XxxTargets.cmake
文件,例如:
# Assumes this repository provide the 'Alpha' target
install(TARGETS Alpha EXPORT AlphaTargets)
export(EXPORT $AlphaTargets
FILE $AlphaTargets.cmake
NAMESPACE myrepo::)
然而,这种超级项目方法使我们能够观察到export
不会直接创建文件。我们可以得出这个结论,因为当生成的文件是来自另一个存储库的include()
(稍后添加,并带有后续的add_subdirectory()
(时,该文件还不存在。
- 为什么
export()
会延迟文件创建 - 更重要的是,有没有办法强制它在下一个
add_subdirectory()
之前实际创建文件
- 为什么
export()
会延迟文件创建
因为您要求它为特定的导出集生成代码,直到配置步骤结束,该导出集才会完全定义。如果它立即生成它,那么export()
和install(EXPORT)
的行为将是令人烦恼和不一致的。
- 更重要的是,有没有办法强制它在下一个
add_subdirectory()
之前实际创建文件
据我所知,export(TARGETS)
签名会立即运行。但我也想不出在使用add_subdirectory
时需要生成导出文件的任何原因。目标已经存在,所以没有必要导入它们!如果名称不同,请根据需要创建ALIAS目标。