【发布时间】:2018-10-25 05:43:41
【问题描述】:
我有一个包含多个模块的 C++ 项目,其中一些构建为库,具有这样的结构:
/MyProject
+---/build
/ModuleA
+---CMakeLists.txt <- module level CMakeLists
+---/src
| +--CMakeLists.txt <- src level CMakeLists
| +--FileA1.cpp
| +--FileA2.cpp
+---/include
| +--FileA1.h
| +--FileA2.h
| +--FileA3.h
/ModuleB
+---CMakeLists.txt
+---/src
| +--CMakeLists.txt
| +--FileB1.cpp
| +--FileB2.cpp
+---/include
| +--FileB1.h
| +--FileB2.h
| +--FileB3.h
main.cpp
CMakeLists.txt <- project level CMakeLists
CMakeLists.txt 文件如下:
项目级别:
cmake_minimum_required(VERSION 3.05)
project(MyProject)
subdirs(ModuleA ModuleB)
set(CMAKE_CXX_STANDARD 11)
add_executable(MyProject main.cpp)
target_link_libraries(MyProject ModuleA ModuleB)
模块级别:
subdirs(src)
src 级别:
FIND_PACKAGE(SomePackage REQUIRED)
INCLUDE_DIRECTORIES(
${SomePackage_INCLUDE_DIR}
${MyProject_SOURCE_DIR}/ModuleA/include
)
SET(SOURCE_FILES <all files from ModuleA/src goes here>)
ADD_LIBRARY(ModuleA STATIC ${SOURCE_FILES})
TARGET_LINK_LIBRARIES(ModuleA
${SomePackage_LIBRARIES}
)
问题是:当我在我的 ModuleA 头文件中包含来自“SomePackage”的头文件(即 FileA1.h 中的 SomePackageFile.hpp)时,我在使用 make 运行构建时遇到错误:
致命错误:SomePackageFile.hpp:没有这样的文件或目录
当我将它们包含在 cpp 文件中时,它们是可见的并且项目可以正确编译。我认为 src 级别的 CMakeLists 有问题,或者整个文件层次结构丢失了一些东西。
【问题讨论】:
-
when I include header files from 'SomePackage' in my ModuleA header files- ModuleA 头文件未编译独立。它们被编译为某个源文件的一部分,该文件属于库或可执行文件。我猜您将FileA1.h包含在项目的main.cpp中。请注意,您的项目的可执行文件看不到为您的模块添加的包含目录。 (命令include_directories()不影响父目录。)