我有以下文件夹结构:
- lib/
-libA/
-include/
- libA.h
-src/
- libA.cpp
-CMakeLists.txt (1)
-libB/
-headerB1.h
-headerB2.h
-headerBx.h
-CMakeLists.txt (2)
- src/
-main.cpp
- CMakeLists.txt (3)
在libA. h中,我尝试包含libB中的一个头文件。在本例中,该头文件将是headerB 1. h,方法是执行
#include <headerB1.h>
但不幸的是,我在cmake中遇到以下错误:致命错误C1083:无法打开包含文件:“标题B1.h”:libA.h文件中没有此类文件或目录。
我有以下CMake内容:(3)第三章:
cmake_minimum_required(VERSION 3.10)
project(project)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
set(SOURCES
src/main.cpp
)
add_executable(${PROJECT_NAME} ${SOURCES})
add_subdirectory("lib/libA")
add_subdirectory("lib/libB")
target_link_libraries(${PROJECT_NAME} PUBLIC libA)
target_link_libraries(${PROJECT_NAME} PUBLIC libB)
(1)请输入您的密码。
add_library(libA STATIC)
target_sources(libA PRIVATE src/libA.cpp)
target_include_directories(libA
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src
)
(2)使用的语言
add_library(libB INTERFACE)
target_include_directories(libB INTERFACE ${CMAKE_CURRENT_SOURCE_DIR})
在我看来,库B(libB)是一个只有头文件的库(如果我用错了术语,请纠正我)。所以libA实际上“使用”了libB,但不知何故,添加或创建libB并没有像我想象的那样执行。我在这里有什么误解?我该如何解决?
main.cpp:
#include <libA.h> //This works!
int main(void) {
//do something with libA class / functions
}
libA.h:
#include <headerB1.h> //This causes the cmake (mingw32-make.exe) error
我用途:
- 制造
- 对编码
- mingw 32-制造
我其实确实看了一下:CMake include library in another library但是不幸的是,让我的CMakeLists(1)像下面的代码一样对我不起作用。或者,再次,我误解了解决方案。
add_library(libA SHARED)
target_sources(libA PRIVATE src/libA.cpp)
target_include_directories(libA
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src
)
target_link_libraries(libA PRIVATE libB)
target_include_directories(libA PUBLIC ${CMAKE_ROOT}/lib/libB)
1条答案
按热度按时间lp0sw83n1#
好的,这实际上是一个非常简单的解决方案,但它确实有意义的是,libB必须首先编译,因为libA使用它。
因此,在CMakeLists.txt(3)中,我将以下两行进行了切换:
至
我还确保已经将下面的代码片段添加到libA CMakeLists.txt(1)中,就像在另一个stackoverflow问题中建议的那样。CMake include library in another library
现在,所有的编译都如预期一样,没有错误。