我想在我的 CMake 项目中添加一些包含一些附加功能的子文件夹。 MyProject 是一个共享库。理想情况下,只包含子文件夹中的文件并将它们全部编译在一起就可以了。但到目前为止,我已经找到了一种方法,仅将其作为适合我的静态库包含在内。所以我的文件结构应该如下所示:
MyProject
src
main.cpp
include
main.h
CMakeLists.txt
3dparty
SomeFolder
src
file.cpp
include
file.h
CMakeLists.txt
我的项目/CMakeLists.txt:
cmake_minimum_required(VERSION 2.8)
project(MyProject)
file(GLOB SRC . src/*.cpp)
file(GLOB INC . include/*.h)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin)
add_library(${PROJECT_NAME} SHARED ${SRC} ${INC})
target_include_directories(${PROJECT_NAME} PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/include
)
add_subdirectory(3dparty/SomeFolder)
和3dparty/SomeFolder/CMakeLists.txt:
project (SomeFolder)
file(GLOB SRC . src/*.cpp)
file(GLOB INC . include/*.h)
add_library(${PROJECT_NAME} STATIC ${SRC} ${INC})
target_include_directories(${PROJECT_NAME} PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/include
)
我可以编译该项目,我看到编译器生成了 SomeFolder.a,所以它看起来不错。但出于某种原因,我无法在 main.* 中包含来自 3dparty/SomeFolder/include
的文件。到目前为止,我已经尝试过:
#include "file.h"
#include "3dparty/SomeFolder/file.h"
但没有任何作用。我收到错误消息:找不到“file.h”文件。
我做错了什么?如何包含子项目中的文件?
最佳答案
因为您忘记将子图书馆链接到您的主图书馆。使用 target_link_libraries()
关于c++ - CMake 无法从子文件夹中找到包含文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57449858/