如何避免cmake子项目中的名称冲突?
因此,我设置了一个元项目,这意味着我有一个目录(根目录),其中包含多个子目录,每个子目录都是一个cmake项目(具有有效的cmakelists)。根目录中的cmakelists使用cmake add_子目录命令导入子项目 每个子项目定义自己的目标(库和可执行文件),以及执行该项目测试套件的目标“检查”和运行doxygen的目标“文档” 我的问题是,CMake不理解检查和文档目标是每个项目的本地目标,因此会抱怨名称冲突如何避免cmake子项目中的名称冲突?,cmake,Cmake,因此,我设置了一个元项目,这意味着我有一个目录(根目录),其中包含多个子目录,每个子目录都是一个cmake项目(具有有效的cmakelists)。根目录中的cmakelists使用cmake add_子目录命令导入子项目 每个子项目定义自己的目标(库和可执行文件),以及执行该项目测试套件的目标“检查”和运行doxygen的目标“文档” 我的问题是,CMake不理解检查和文档目标是每个项目的本地目标,因此会抱怨名称冲突 所以我的问题是,有没有办法让cmake明白这些目标是每个项目的局部目标 CMa
所以我的问题是,有没有办法让cmake明白这些目标是每个项目的局部目标 CMake不允许重复的目标名称。基本原理见以下文件:
- 在CMake和CMake中都可以明确引用唯一的名称 代码和“生成工具”命令行上的
- 逻辑名称由Xcode和VS IDE生成器使用 为目标生成有意义的项目名称
cmp002
设置为OLD
(通过cmake_策略(将cmp002设置为OLD)
完成),这至少可以消除cmake错误,但我建议不要这样做-它肯定不适用于MSVC/Xcode
除了手工编码唯一名称之外,我能看到的唯一选项是编写一个CMake函数,该函数为每个“检查”目标生成一个唯一的名称——例如,它可以附加正在检查的目标的名称,产生诸如检查我的库一
,检查我的执行库一
等名称
这个函数还可以用来收集所有已注册的
check
实例的列表,并将它们添加到一个名为check
的单一目标中,该目标将调用每个下属check
,因此运行make check
可以运行所有实例。嗯,我正在寻找类似“每个项目一个名称空间”的东西这是一种解决方案,但在cmake中似乎不存在,所以我将使用您的解决方案,谢谢@从技术上讲,您可以自己使用名称空间约定。例如,用项目名称作为项目所有目标的前缀。@ibizaman我就是这样做的,使用宏自动添加前缀。是否有无需重命名任何内容即可启用的非自动前缀?