我有一个 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
导入,以供使用我的库的其他人作为示例??
我当前的CMake文件是这样的
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
在那里,你需要创建它。o
将目录结构更改为以下布局(仅显示如下相关文件):
.
+ 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
标头之间的混淆。