为什么CMake export()命令推迟了输出文件的创建?可以避免吗



我们将单独的存储库包含在一个通用的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目标。

最新更新