build - 了解 CMake 背后的目的

标签 build cmake

我试图了解 CMake 背后的目的。为什么它的设计就像现在一样。以下是一些我想回答的问题。

  • 为什么 cmake 会生成 makefile 而不仅仅是构建项目?
  • 为什么 cmake 文件是一系列命令而不仅仅是配置文件 eg:ini/xml/yaml
  • 我写入 CMakeLists.txt 的命令应该做什么?我猜只是调用编译器太容易了
  • 我应该按什么顺序执行命令?
  • 所有内容都不区分大小写吗?可以全部小写吗?
  • 为什么教程建议我明确列出每个源文件?
  • 如何构建我的 CMakeLists.txt 以使其简短且易于维护。我在实际项目中查找的每个文件看起来都非常困惑。

最佳答案

可能很难理解 CMake 的工作原理。我会尽力简要回答您发布的一些问题。

Why does cmake generate makefiles instead of just building the project?

CMake 是一个 cross-platform make system 并且独立于编译器。它不仅会生成 make 构建系统,还会生成 Visual Studio 解决方案文件。使用相同的 CMakeList.txt 文件,某人可以轻松地创建 Windows 构建 (Visual Studio) 或 Linux 构建 (g++)。

Why are cmake files [a series of] commands and not just configuration files eg: ini/xml/yaml

编译器不使用通用配置,因此 CMake 必须适应目标编译器。

CMake 文件是为目标编译器生成适当配置的一系列命令。

What are the commands that I write into the CMakeLists.txt supposed to do? Just calling the compiler would be too easy I guess

假设它们会为目标编译器生成适当的配置,如果编写正确,它们会生成。

In which order am I supposed to do the commands?

按照重要的顺序,如果顺序很重要的话。是的,这是一个模糊的答案,但这取决于项目。例如 include() 命令将用于添加额外的 cmake 文件,如果您以错误的顺序包含它们,它可能会破坏构建系统的生成。

cmake 文件中的第一个命令必须是最新版本的 CMake (3.0.1) 所需的最低版本。从那里看。 :)

例如,此命令不适用于低于 2.6 的 CMake 版本。 cmake_minimum_required(2.6 版)

请参阅此答案末尾的一些教程链接。

Is everything case insensitive? Can I write everything lower case?

如 CMake wiki 的 language syntax page 所述,所有命令都不区分大小写,但您必须考虑传递给命令的内容的大小写。

Why do tutorials advise me to list every source file explicitly?

因为您必须明确列出每个源文件。这可以在 cmake 文件或 cmake 文件中引用的单独文件列表中完成。有关使用单独文件列表的警告,请参阅 Antonio 的 answer

CMake 确实提供了一个 command aux_source_directory,它收集指定目录中所有源文件的名称并将列表存储到变量中,但它只能用于“生成”源文件与 Antonio 的 answer 中提到的相同原因。

How do I structure my CMakeLists.txt to keep it short and simple to maintain. Every file I looked up in real projects looked very cluttered.

很容易弄乱 CMake 文件,解决此问题的一种方法是使用您使用 include 命令引用的 .cmake 文件。

可以在 CMake about page 上找到一个很好的资源(尽管仍在开发中)。

它分为几个部分:

  1. Overview
  2. 统计(正在开发中)
  3. Participants
  4. Documentation
  5. License
  6. Success Stories
  7. Publications
  8. News

教程

CMake Tutorial - 来自官方 CMake 文档页面

Getting Started With CMake - 使用 CMake 和 gcc 的教程。

Using CMake To Build QT Projects - 使用 CMake 和 QT 的教程。

关于build - 了解 CMake 背后的目的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25751406/

相关文章:

CMake 附加调试选项

visual-studio - Perl6 NativeCall 在 native 库中找不到符号

visual-studio-2015 - 未生成 CMake 目标 RUN_TESTS

linux - CMake 找不到 QtCore

android - 如何在Android Studio中解决此构建问题(aapt2文件不存在)?

java - pom.xml中自动递增版本号并显示在应用程序中

java - 编写一个 gradle 脚本,将所有依赖项保存到 ${projectDir}/lib 文件夹中

c# - Visual Studio 2008 奇怪的构建错误(类型与导入类型冲突)

java - kotlin项目无法在gradle中构建

android - 如何在Android中使用C++