如何用CMake实现类似Python的命名空间式C++头文件引用?
用CMake实现类似Python包的C++命名空间式头文件引用
Python中的包命名空间示例
Python的模块(或包)为其他模块提供命名空间,示例目录结构如下:
package ├── core │ ├── core.py │ └── __init__.py ├── extensions │ ├── extensions.py │ └── __init__.py ├── __init__.py └── utils ├── __init__.py └── utils.py
要导入core.py,可执行以下代码:
from package.core import core
(假设package已在PYTHONPATH中),这种导入方式可以避免命名冲突。
C++中的实现需求
希望通过CMake实现类似Python的命名空间引用效果,让C++代码能够以如下方式引用头文件:
#include <package/core/core.hpp>
目标目录结构
package ├── CMakeLists.txt ├── core │ ├── CMakeLists.txt │ ├── core.cpp │ └── core.hpp ├── extensions │ ├── CMakeLists.txt │ ├── extensions.cpp │ └── extensions.hpp └── utils ├── CMakeLists.txt ├── utils.cpp └── utils.hpp
额外限制条件
- 每个子目录必须拥有独立的
CMakeLists.txt - 根目录的
CMakeLists.txt无需知晓具体的头文件或源文件信息 - 不使用
target_include_directories指令,因为该指令会将整个目录加入编译器搜索路径,导致IDE(如CLion)显示无关文件
内容的提问来源于stack exchange,提问作者user16776498
相关产品推荐
相关产品推荐

