为什么cmake会出现这种情况

Why is this happening with cmake

本文关键字:情况 cmake 为什么      更新时间:2023-10-16

我正在处理一个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")

链接到gif

链接到代码

cmake中的

变量仅限于它们所在目录及其子目录的范围。

这样,在gamelib子目录中调用find_module()不会在主目录中找到要使用的模块。

传播include目录依赖关系的首选方式是将它们添加到目标(在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的可执行文件中提及它们。