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