0

我有这样的文件结构

.
|__ lib_a
|    |
|    |_ include 
|    |   |_ lib_a.h
|    |_ src
|        |_ lib_a.cpp
|    
|
├── include
│   ├── main.h
|
└── src
    ├── main.cpp

我打算将lib_a.hand打包lib_a.cpp到一个lib_a.so,然后在main.h

#include "lib_a.h"   // from the `lib_a.so`

这种结构可能与我的真实文件不同,但主要目的是相同的:包含来自solibrary的 header ,而不是来自目录。在这种情况下,我们有解决方案CMakeLists.txt吗?

以下 CMake 仍然lib_a.h从其目录中搜索

add_library(liba SHARED lib_a/src/lib_a.cpp)
target_include_directories(liba PRIVATE  lib_a/include)

add_executable(mainex src/main.cpp)
target_include_directories(mainex PRIVATE include)
target_link_libraries(mainex PRIVATE liba)

更新

为什么我不用target_include_directories(mainex include lib_a/include )?这实际上是我的抱怨。的内容lib_a/include只能由 NVCC (compiler for Cuda) 编译,不能由 GCC 编译。所以我打算先创建 nvcc-compiled liba.so,然后将这个库中的内容包含在main.cpp. target_include_directories(mainex include lib_a/include )得到一个错误,因为 gcc 无法处理lib_a/include

4

0 回答 0