CMake找不到子文件夹中的包含文件

时间:2019-08-11 12:14:10

标签: c++ cmake

我想在我的CMake项目中添加一些子文件夹,其中包含一些其他功能。 MyProject是一个共享库。理想情况下,最好只包含子文件夹中的文件,然后将所有文件一起编译。但是到目前为止,我已经找到了一种仅将其包含为也适合我的静态库的方法。因此,我的文件结构应如下所示:

for (int i = 0; i < studentList.length; i++) {
      System.out.println(studentList[i]);
    }

MyProject / CMakeLists.txt:

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

3dparty / SomeFolder / 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)

我可以编译项目,并且看到编译器会生成SomeFolder.a,因此看起来不错。但是由于某些原因,我无法在main。*中包含来自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 ) 的文件。到目前为止,我已经尝试过:

3dparty/SomeFolder/include

但没有任何效果。我收到错误:找不到“ file.h”文件。

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

1 个答案:

答案 0 :(得分:1)

因为您忘记了将子库链接到您的主库。美元target_link_libraries()