所以我设置了一个元项目,这意味着我有一个包含多个子目录的目录(根目录),每个子目录都是一个cmake项目(带有一个有效的cmakelists).根目录中的cmakelists使用cmake add_subdirectory命令导入子项目.
每个子项目定义它自己的目标(库和可执行文件)以及执行该项目的测试套件的目标"check"和运行doxygen的"docs".
我的问题是,CMake不理解检查和文档目标是每个项目的本地目标,因此抱怨名称冲突.
所以我的问题是,有没有办法让cmake明白这些目标是每个项目的本地目标?
CMake 不允许重复的目标名称。政策文档CMP0002中提供了基本原理:
- 可以在 CMake 代码和 make 工具命令行中明确引用唯一名称。
- Xcode 和 VS IDE 生成器使用逻辑名称为目标生成有意义的项目名称。
您可以尝试设置CMP0002为OLD(通过完成cmake_policy(SET CMP0002 OLD)),这至少可以消除 CMake 错误,但我建议不要这样做 - 它肯定不适用于 MSVC/Xcode。
我能看到缺少手动编码唯一名称的唯一选择是编写一个 CMake 函数,该函数为每个“检查”目标生成一个唯一名称 - 例如,它可以附加正在检查的目标的名称,产生如下名称check_my_lib_one,check_my_exe_one, ETC。
此函数还可以用于收集所有已注册check_<Target>实例的列表,并将它们添加到名为的单个目标中,check该目标将调用每个从属实例check_<Target>,因此运行make check会运行所有实例。
| 归档时间: |
|
| 查看次数: |
1080 次 |
| 最近记录: |