【发布时间】: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”文件。
我做错了什么?如何包含子项目中的文件?
【问题讨论】: