我正在尝试设置我的项目来构建包含其完整功能的多个动态库.每个库都有子文件夹.子文件夹库彼此依赖,因此它们必须相互引用函数.我似乎已经设法让CMake在项目中没有错误地运行,但是当我去构建时,我的头部找到了彼此的麻烦.似乎在构建时,包含路径未正确设置.我怎样才能解决这个问题?我是否需要采取其他步骤才能正确设置包含路径?
结构看起来像这样
root
CMakeLists.txt
bin
lib
lib0
CMakeLists.txt
lib0.h
lib0.cpp
lib1
CMakeLists.txt
lib1.h
lib1.cpp
...
Run Code Online (Sandbox Code Playgroud)
在根目录的CMakeLists.txt中,我有这样的声明:
set(ROOT /blah/blah/root)
include_directories(${ROOT}/lib0)
include_directories(${ROOT}/lib1)
add_subdirectory(lib0)
add_subdirectory(lib1)
Run Code Online (Sandbox Code Playgroud)
在子文件夹的CMakeLists.txt中,我有:
set(lib0_SOURCES "")
list(APPEND lib0_SOURCES lib0.cpp)
add_library(lib0_lib ${lib0_SOURCES})
Run Code Online (Sandbox Code Playgroud)
我的库标题看起来像(假设这是lib0.h):
#include "lib1/lib1.h"
...
Run Code Online (Sandbox Code Playgroud)
CMake运行良好,没有错误,但是当我去编译时,我得到一个错误,如:
In file included from /blah/blah/root/lib0/lib0.cpp:1:0:
/blah/blah/root/lib0/lib0.h:1:30: fatal error: lib1/lib1.h: No such file or directory
Run Code Online (Sandbox Code Playgroud)
你告诉海湾合作委员会#include the file "lib1/lib1.h"
.在构建时,CMake会要求在"$ {ROOT}/lib0"和"$ {ROOT}/lib1"中查找额外的标题
所以,GCC正在尝试"$ {ROOT} /lib0/lib1/lib1.h"和"$ {ROOT} /lib1/lib1/lib1.h"Yup,不能正常工作.
要解决这个问题:
include_directories(".")
#include the file "lib1.h"
#include the file "../lib1/lib1.h"
IMO,我会选择第一个选项!
归档时间: |
|
查看次数: |
12522 次 |
最近记录: |