【发布时间】:2016-06-12 22:19:19
【问题描述】:
我正在尝试使用 CMake 构建一个项目。该项目所需的库之一位于我的项目目录之外的路径上。头文件分散在子目录以及文件夹的根目录中。有点像这样:
/some_remote_path/packages/BOOX/
|-> foo.h
|-> banana.h
|-> orange.h
|-> timer
|-> lib0.h
|-> lib1.h
|-> lib2.h
|-> types
|-> type0.h
|-> type1.h
|-> type2.h
...
我正在尝试使用以下命令链接这些:
include_directories (${SOME_OTHER_LIB_HEADERS} ${BOOX_HEADERS})
如何将所有标题存储到${BOOX_HEADERS} 变量中?我尝试了很多东西,例如利用 GLOB_RECURSE 功能的各种宏:
FILE(GLOB_RECURSE ${BOOX_HEADERS} ${path_to_boox_lib} *.h)
但没有任何成功。我想跳过编写复杂的find.cmake 脚本。那会帮助我(可能?)生成类似 ${BOOX_INCLUDE_DIRS} 的东西。什么是简单地构造头列表并使用 CMake 将其传递给编译器的最佳解决方案。
【问题讨论】:
-
您没有通过包含标题来链接任何内容。对于多个位置的标题,您可以将列表分配给变量
-
是的,如何通过递归收集所有头文件来创建列表变量?我应该编辑我的问题以使其更清楚。一旦我解决了这个问题,我将继续使用 lib 文件。
-
你不应该收集任何头文件,
*.h。 include_directories 用于包含头文件的目录。您需要为 BOOX 目录、计时器和类型执行 include_directories,除非您使用 `#include包含 lib0.h。那么你只需要顶层目录BOOX -
所以我必须手动指定每个子文件夹?
-
是的,或者只是顶部文件夹,如果您在包含中附加
timer和types。include_directories用于目录而不是标题