我正在尝试设置我的项目来构建几个包含其完整功能的动态库。每个库都有子文件夹。子文件夹库相互依赖,因此它们必须相互引用函数。我似乎已经成功地让 CMake 在项目上运行而没有错误,但是当我去构建时,我的标头无法找到彼此。似乎在构建时,包含路径设置不正确。我怎样才能解决这个问题?我需要采取其他步骤才能正确设置包含路径吗?
结构看起来像这样
root
CMakeLists.txt
bin
lib
lib0
CMakeLists.txt
lib0.h
lib0.cpp
lib1
CMakeLists.txt
lib1.h
lib1.cpp
...
在根目录的 CMakeLists.txt 中,我有如下声明:
set(ROOT /blah/blah/root)
include_directories(${ROOT}/lib0)
include_directories(${ROOT}/lib1)
add_subdirectory(lib0)
add_subdirectory(lib1)
在子文件夹的 CMakeLists.txt 中,我有:
set(lib0_SOURCES "")
list(APPEND lib0_SOURCES lib0.cpp)
add_library(lib0_lib ${lib0_SOURCES})
我的库头看起来像(假设这是 lib0.h):
#include "lib1/lib1.h"
...
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
你告诉海湾合作委员会#include the file "lib1/lib1.h"
。当您构建时,CMake 会要求在“${ROOT}/lib0”和“${ROOT}/lib1”中查找额外的标头
因此,GCC 正在尝试“${ROOT}/lib0/lib1/lib1.h”和“${ROOT}/lib1/lib1/lib1.h”是的,无法工作。
要解决这个问题:
- 您可以在根 CMakeLists.txt 中使用:
include_directories(".")
- 保留你的 CMakeLists 但是
#include the file "lib1.h"
- 删除 CMakeLists 中的 include_directories 并
#include the file "../lib1/lib1.h"
IMO,我会选择第一个选择!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)