CMake GLOB 不返回任何源文件?

Posted

技术标签:

【中文标题】CMake GLOB 不返回任何源文件?【英文标题】:CMake GLOB not returning any source files? 【发布时间】:2020-03-16 20:08:33 【问题描述】:

我正在尝试使用带有GLOB 的 CMake 自动为我的 C++ 项目编写 Makefile。然而,代码和标头位于两个单独的文件夹中。

/Users/username/Coding/Major Projects/ProjectName/Backend

/Users/username/Coding/Major Projects/ProjectName/Terminal

后端有独立于平台的代码。只是一堆 c 和 c++ 源文件。 Terminal 文件夹中有一些代码使用 Backend 中指定的对象对它们运行一些测试。这些位于不同文件夹中的原因是后端代码是多平台的。所以一个 Xcode 项目导入它等等。终端文件夹有测试代码,因为这是唯一一个试图将它编译成 linux 二进制文件的文件夹。

任何人,我有以下 CMakeList.txt 文件,我正在尝试构建该文件以生成 Makefile。

cmake_minimum_required(VERSION 2.8.9)
project(terminalTest)

set(MainSource "/Users/username/Coding/Major Projects/ProjectName/Backend")
set(TerminalSource "/Users/username/Coding/Major Projects/ProjectName/Terminal")

#Bring the headers, such as Student.h into the project
include_directories($MainSource $TerminalSource)

#Can manually add the sources using the set command as follows:
#set(SOURCES src/mainapp.cpp src/Student.cpp)

#However, the file(GLOB...) allows for wildcard additions:
file(GLOB SOURCES "./$MainSource,$TerminalSource/*.cpp")

add_executable(terminalTest $SOURCES)

当我从 CMake GUI 运行它时,结果是配置成功,但错误 No SOURCES given to target: terminalTest 意味着我的 file() 命令无法正常工作。

我认为这可能与我的路径中有空格的事实有关,但似乎也没有。顺便说一句,我将此文件放在终端文件夹中并尝试从终端/构建构建。

有什么方法可以调试并查看GLOB 命令引入的源?我真的可以像这样做一个多目录GLOB吗?

【问题讨论】:

【参考方案1】:

您的 file(GLOB ...) 路径格式不正确。您可以在此命令中分别列出源代码的路径,以获取 both 目录中的所有源文件。

file(GLOB SOURCES 
    $MainSource/*.cpp
    $TerminalSource/*.cpp
)

【讨论】:

以上是关于CMake GLOB 不返回任何源文件?的主要内容,如果未能解决你的问题,请参考以下文章

将文件夹下的所有文件添加到 CMake glob?

C++学习(四九二)cmake file的GLOB和GLOB_RECURSE

C++学习(四九二)cmake file的GLOB和GLOB_RECURSE

cmake找不到头文件

php 使用Glob() 查找文件技巧

测试 glob 在 Bash 中是不是有任何匹配项