build - 递归 CMake 搜索头文件和源文件

我是 CMake 的新手,想问是否有人可以帮助解决以下问题。

我在它们各自的文件夹中有 C++ 源文件和头文件,现在,我想创建一个 CMake 文本文件,以递归方式搜索它们。

目前,我是这样做的:

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(CarDetectorDAISY)

file(GLOB_RECURSE SRCS *.cpp)
file(GLOB_RECURSE HDRS *.h)

ADD_EXECUTABLE(stereo_framework  ${SRCS} ${HDRS})
TARGET_LINK_LIBRARIES(stereo_framework) 

这将创建我的 CarDetectorDAISY.sln 解决方案文件,当我尝试构建它时,它显示 找不到头文件的错误(没有这样的文件或目录)。

如果有人可以帮助我,我将不胜感激。谢谢。

最佳答案

您可能缺少一个或多个 include_directories来电。将 header 添加到 add_executable 调用中的文件列表实际上并不会将其添加到编译器的搜索路径中 - 这是一个方便的功能,因此它们只会添加到 IDE 中的项目文件夹结构中。

因此,在您的根目录中,假设您有/my_lib/foo.h,并且您希望将其包含在源文件中

#include "my_lib/foo.h"

然后在你的 CMakeLists.txt 中,你需要这样做:

include_directories(${CMAKE_SOURCE_DIR})

如果你只是想做

#include "foo.h"

然后在 CMakeLists.txt 中,做

include_directories(${CMAKE_SOURCE_DIR}/my_lib)


我应该提到 file(GLOB...)不是收集源列表的推荐方法 - 您实际上应该在 CMakeLists.txt 中明确添加每个文件。通过这样做,如果您稍后添加或删除源文件,CMakeLists.txt 将被修改,并且 CMake 会在您下次尝试构建时自动重新运行。来自 file 的文档:

We do not recommend using GLOB to collect a list of source files from your source tree. If no CMakeLists.txt file changes when a source is added or removed then the generated build system cannot know when to ask CMake to regenerate.

https://stackoverflow.com/questions/17653738/

相关文章:

android - 如何使用 Expo CLI 为 android 构建 64 位 native 代

eclipse - noClassDefFoundError 使用 Eclipse 的 Scala

android - 在 Gradle 产品 flavor 上调试签名配置

xcode - 学习和理解 Xcode 构建系统

ios - 使用 iOS 构建主机时 Xamarin 实际在做什么?

android - 管理 Android 应用商店(谷歌/亚马逊/等)的代码/构建?

c++ - 关于如何部署 C++ 代码以在任何地方工作的提示

gradle - 启动一个 Gradle 守护进程,1 个忙碌和 6 个停止的守护进程无法重用,使用

android - 运行 Android Studio gradle build 时如何使用所有 C

msbuild - Mercurial/Kiln + MSBuild + MSTest 的持续集成建