如何在CMake中的不同目录中使用文件glob

时间:2016-12-01 06:37:29

标签: cmake

即使他们选择不在文档中提及此内容,file(GLOB ...)file(GLOB_RECURSE ...)似乎只适用于当前的源目录。有没有办法为不同的目录添加一个球?

2 个答案:

答案 0 :(得分:3)

file(GLOB)起初可能有点混乱,几个月前我也有类似的问题。

您必须直接在<globbing-expressions>

中指定路径
file(GLOB <variable>
     [LIST_DIRECTORIES true|false] [RELATIVE <path>]
     [<globbing-expressions>...])

例如:

file(GLOB my_cpp_list "${CMAKE_CURRENT_SOURCE_DIR}/directory/*.cpp")
foreach(file_path ${my_cpp_list})
    message(${file_path})
endforeach()

将在${CMAKE_CURRENT_SOURCE_DIR}/directory中打印所有 .cpp 文件的路径。

答案 1 :(得分:1)

我有同样的问题,无论我指定什么路径,我都会从CMAKE_CURRENT_SOURCE_DIR获得一个glob。问题是我提供给GLOB的路径不是有效的,它正在恢复(优雅,但令人烦恼)到CMAKE_CURRENT_SOURCE_DIR。例如,以下任一项都会创建您看到的症状:

file(GLOB my_cpp_list "${CMAKE_CURRENT_SOURCE_DIR}/directory *.cpp")

我忘记了&#34; /&#34;在&#34;目录&#34;之后。这就是为什么我从来没有得到有效的结果,即使有效的目录名称。

file(GLOB my_cpp_list "${CMAKE_CURRENT_SOURCE_DIR}/directoryy/*.cpp")

没有名为&#34; directoryy&#34;

的子文件夹