我有这样的文件结构
.
|__ lib_a
| |
| |_ include
| | |_ lib_a.h
| |_ src
| |_ lib_a.cpp
|
|
├── include
│ ├── main.h
|
└── src
├── main.cpp
我打算将lib_a.h
and打包lib_a.cpp
到一个lib_a.so
,然后在main.h
:
#include "lib_a.h" // from the `lib_a.so`
这种结构可能与我的真实文件不同,但主要目的是相同的:包含来自so
library的 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