我有一个 CMake 项目,其文件夹结构如下:
├── CMakeLists.txt
├── conanfile.py
├── include
│ └── algorithm.h
├── src
│ └── algorithm.cpp
└── test_package
├── CMakeLists.txt
├── conanfile.py
└── src
└── example.cpp
在我的
test_package/src/example.cpp
中,我有一个像这样的example.cpp
文件
#include "algorithm.h"
#include <vector>
#include <string>
int main() {
algorithm();
}
如何使用 CMake 来构建我的项目,以便我的
include/algorithm.h
将作为 foundation/algorithm.h
导入,以供使用我的库的其他人作为示例?
我现在的
CMakeLists.txt
是这样的
cmake_minimum_required(VERSION 3.15)
project(algorithm CXX)
add_library(algorithm src/algorithm.cpp)
target_include_directories(algorithm PUBLIC include)
set_target_properties(algorithm PROPERTIES PUBLIC_HEADER "include/algorithm.h")
install(TARGETS algorithm)
这个“命名空间”只不过是一个目录。如果你想要一个
foundation
目录存在,你只需要创建它。
将目录结构更改为以下布局(仅显示如下相关文件):
.
+ CMakeLists.txt
+ include
+ foundation
+ algorithm.h
在您的
CMakeLists.txt
中,您无需更改任何内容。两条线
add_library(algorithm ...)
target_include_directories(algorithm PUBLIC include)
... 将把
include
添加到包含目录搜索路径中。因此,每个人都必须 #include "foundation/algorithm.h"
包含相应的文件。
如果您只想更改它以供外部使用,您可以这样做
add_library(algorithm ...)
target_include_directories(algorithm PRIVATE include/foundation)
target_include_directories(algorithm INTERFACE include)
尽管我也会在内部使用
foundation
前缀并完成它。
在您的具体情况下,我肯定这样做只是为了避免您的 foundation/algorithm.h
和标准库的 algorithm
标头之间的混淆。