如何构建带有命名空间的cmake库?

问题描述 投票:0回答:1

我有一个 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)


cmake
1个回答
0
投票

如果你想要一个目录

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
标头之间的混淆。

© www.soinside.com 2019 - 2024. All rights reserved.