我有这样的文件结构
.
|__ 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