使用make和ninja在cmake中正确文件通配

问题描述 投票:0回答:1

很多关于CMake的博客和讨论都告诉你不要使用文件通配来建立你的资源。也就是说,这很糟糕:

file(GLOB SOURCES *.cxx)

这很好:

set(SOURCES a.cxx b.cxx c.cxx d.cxx e.cxx [...])

我的理解是,其根本原因在于,虽然一些构建系统支持通配,但其他构建系统不支持通配,而CMake正试图在这种情况下构建系统不可知。这看似合理。

但是,在我个人的情况下,我将使用的所有构建系统(例如make和ninja)都支持globbing。无论如何在CMake中总是将globbing转发到构建中,以获得两全其美 - 缩写的globbing自动获取新文件而无需重新运行CMake?

cmake
1个回答
3
投票

我的理解是,其根本原因在于,虽然一些构建系统支持通配,但其他构建系统不支持通配,而CMake正试图在这种情况下构建系统不可知。

主要原因在manual中说明:

注意:我们不建议使用GLOB从源树中收集源文件列表。如果在添加或删除源时没有更改CMakeLists.txt文件,则生成的构建系统无法知道何时要求CMake重新生成。

这是事实。如果添加新的源文件,则需要重新运行CMake。因此建议手动列出源文件的方法,因为你不能忘记这样做;忘记重新运行CMake会导致沮丧。如果有CMake集成,IDE会自动为您执行此操作。

但是,在我个人的情况下,我将使用的所有构建系统(例如make和ninja)都支持globbing。无论如何在CMake中总是将globbing转发到构建中,以获得两全其美 - 缩写的globbing自动获取新文件而无需重新运行CMake?

不,没有。如果有,IDE的/插件将不需要实现此功能。所以你需要朝那个方向看。

© www.soinside.com 2019 - 2024. All rights reserved.