【问题标题】:CMake can't find include file from subfolderCMake无法从子文件夹中找到包含文件
【发布时间】:2019-08-11 12:14:10
【问题描述】:

我想在我的 CMake 项目中添加一些包含一些附加功能的子文件夹。 MyProject 是一个共享库。理想情况下,只包含子文件夹中的文件并将它们编译在一起就可以了。但到目前为止,我找到了一种方法,只将它作为一个也适合我的静态库包含在内。所以我的文件结构应该如下所示:

MyProject
    src
        main.cpp
    include
        main.h
    CMakeLists.txt
    3dparty
        SomeFolder
           src
               file.cpp
           include
               file.h
           CMakeLists.txt

MyProject/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”文件。

我做错了什么?如何包含子项目中的文件?

【问题讨论】:

    标签: c++ cmake


    【解决方案1】:

    因为您忘记将子库链接到主库。用户 target_link_libraries()

    【讨论】:

    • 好的,我已将 target_link_libraries(${PROJECT_NAME} SomeFolder) 添加到主 CMakeLists.txt 中,并且看起来可行。是否可以在 3dparty/SomeFolder/CMakeLists.txt 中以某种方式添加这一行?最好添加仅包含一条指令的子文件夹 (add_subdirectory)。
    • 不,我相信您在这里做出了一些错误的假设。 add_subidirectory() 对链接没有任何作用(正如您所经历的那样),并且 target_link_libraries() 的参数是目标(可执行文件或库),而不是目录路径。链接的正常方法是使用 target_link_libraries() 指定每个目标的依赖关系。如果 CMake 可以在某个时候唯一地将其中一个依赖项标识为另一个目标,它就会知道该怎么做。
    猜你喜欢
    • 2013-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-14
    • 1970-01-01
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    相关资源
    最近更新 更多