我正在开发一个c ++项目,我正在使用cmake作为构建系统,因此我的工作流程是对代码进行更改。然后,
rm -r build
mkdir build
cd build
cmake -G "Unix Makefiles" ..
make
现在我添加了glew作为项目的依赖项,所以每当我尝试运行make
时,我都会收到错误SDL.h not found(this was working before)
。过了一段时间我决定检查CMakeCache.txt
。打开它使用vim
然后:wq
这就是我现在所做的所有make
,我的项目正在成功构建,我不知道为什么会这样,有人可以告诉我为什么吗?
ps:添加了此活动的GIF,请查看以获得清晰的图片
(我正在处理的代码也是链接的,这个问题就在这个提交中“dd4452b45c733e0612bc5f3c632e9d1a08be8072”)
答案 0 :(得分:2)
cmake中的变量仅限于它们所在目录的范围及其子目录。
这样,在gamelib子目录中调用find_module()时,找不到该模块在主目录中使用。
传播包含目录依赖关系的首选方法是将它们添加到目标(在gamelib目录中),如下所示:
target_include_directories(gamelib BEFORE PRIVATE
$<BUILD_INTERFACE:${SDL2_INCLUDE_DIR}>
$<BUILD_INTERFACE:${GLEW_INCLUDE_DIR}>
)
target_include_directories(gamelib SYSTEM BEFORE PUBLIC
$<BUILD_INTERFACE:${SDL2_INCLUDE_DIR}>
$<BUILD_INTERFACE:${GLEW_INCLUDE_DIR}>
)
然后你甚至不需要在任何使用gamelib的可执行文件中提及它们。