我想在我的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”文件。
我做错了什么?如何包含子项目中的文件?
答案 0 :(得分:1)
因为您忘记了将子库链接到您的主库。美元target_link_libraries()