档案结构:
CMakeLists.txt
src/
evolution.cpp
evolution.h
main.cpp
helpers/
disposable.h
engine/
game.h
game.cppCMakeLists.txt:
cmake_minimum_required(VERSION 3.17)
project(evolution)
add_library(helpers
src/helpers/disposable.h)
set_target_properties(helpers PROPERTIES LINKER_LANGUAGE CXX)
add_library(engine
src/engine/game.h
src/engine/game.cpp)
add_executable(evolution src/main.cpp)
target_link_libraries(evolution engine helpers)Game类(game.h)继承自Diposable (disposable.h),但我无法在game.h文件中使用简单的#include "disposable.h"构建项目。
如何配置CMake,使engine库能够看到helpers库?
CMake错误:
[ 20%] Building CXX object CMakeFiles/engine.dir/src/engine/game.cpp.o
In file included from /home/shane/projects/evolution/src/engine/game.cpp:1:
/home/shane/projects/evolution/src/engine/game.h:4:10: fatal error: disposable.h: No such file or directory
4 | #include "disposable.h"
| ^~~~~~~~~~~~~~
compilation terminated.发布于 2020-04-09 06:46:40
向项目添加标头只会帮助IDE找到标头。它不会改变构建指令。相反,您需要将target_include_directories()与INTERFACE或PUBLIC部分一起使用,以获取链接到该部分的任何库,从而将包含目录添加到自身。
目前,您的帮助程序库更像是一个接口。要使这个最小的示例正常工作,请执行以下操作:
cmake_minimum_required(VERSION 3.17)
project(evolution)
add_library(helpers INTERFACE) # INTERFACE is good for header-only libraries
target_include_directories(helpers INTERFACE src/helpers)
add_library(engine
src/engine/game.h
src/engine/game.cpp)
add_executable(evolution src/main.cpp)
target_link_libraries(evolution engine helpers)现在包含角括号:#include <disposable.h>
如果您的库变得更复杂(不仅仅是头文件),那么用源替换INTERFACE中的add_library。要使helpers库和链接到它的任何库都可以使用目录,请将INTERFACE更改为target_include_directories中的PUBLIC。
cmake_minimum_required(VERSION 3.17)
project(evolution)
add_library(helpers src/helpers/helper.cpp)
target_include_directories(helpers PUBLIC src/helpers)
add_library(engine
src/engine/game.h
src/engine/game.cpp)
add_executable(evolution src/main.cpp)
target_link_libraries(evolution engine helpers)https://stackoverflow.com/questions/61111799
复制相似问题