c++ - CMake 无法从子文件夹中找到包含文件

标签 c++ cmake

我想在我的 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/

相关文章:

makefile - 摆脱 `disabling jobserver mode` 警告?

c++ - 如何将 BOOST_BIND_OPERATOR( !=, not_equal ) 与未定义 != 运算符的类一起使用

c++ - 使用 LLVM IR 实现动态类型语言

c++ - 解决 "_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)"崩溃。 C++

c++ - 双击时的文件关联问题(Windows 消息弹出)

c++ - 具有对齐成员的对象的动态分配 - 可能的解决方案?

build - CMake 的新手想知道哪些尘土飞扬的角落?

c++ - 海湾合作委员会 11 : How to tell CMake I don't want the default C++ GNU extensions?

c++ - 如何正确链接子目录中的静态库?

c++ - Boost.Python 1.54(调试版本)对 Windows 上 Python27.lib 的令人费解的依赖性