• make: 是一个构建工具,它的任务是读取 Makefile 文件,并基于这些文件中的指令执行具体的构建操作。Makefile 文件包含了如何构建项目的规则,make 负责解析这些规则并执行必要的命令来编译和链接源代码,生成可执行文件或库。
• CMake: 是一个构建系统生成器。它并不直接进行编译或链接,而是根据项目中 CMakeLists.txt 文件的内容生成一个或多个构建系统的描述文件(如 Makefile 或 Visual Studio 解决方案)。CMake 提供了一种更高级、更抽象的方式来描述构建过程,这使得它能够跨平台地生成各种构建系统。
• make: 通常与特定的平台相关联,尽管 Makefile 可以编写得足够通用以适应多个平台,但通常需要针对不同平台进行调整。
• CMake: 设计为跨平台工具,能够在 Windows、macOS、Linux 等多种操作系统上使用相同的 CMakeLists.txt 文件生成适当的构建系统描述。
• make: 相对简单,直接,但需要手动维护 Makefile 文件中的构建规则,这在大型项目中可能会变得复杂和难以管理。
• CMake: 提供了更高级的抽象和更丰富的功能集,如条件语句、循环、函数定义等,这使得 CMakeLists.txt 文件可以编写得更加灵活和模块化。
• make: 生成 Makefile,这是一个文本文件,其中包含了 make 程序需要执行的具体命令。
• CMake: 可以生成多种类型的构建系统描述文件,包括但不限于 Makefile、Ninja 构建文件、Visual Studio 解决方案 (.sln) 文件、Xcode 项目文件等。
• make: 依赖关系通常需要在 Makefile 中显式指定。
• CMake: 提供了内置的机制来处理依赖关系,包括自动检测和配置外部库。
总结来说,make 更像是一个执行者,负责按照给定的规则执行构建操作,而 CMake 则是一个协调者,负责生成构建规则,使得 make 或其他构建工具能够有效地完成工作。在实际开发中,CMake 通常位于 make 的上游,先由 CMake 生成 Makefile 或其他构建系统描述,然后再由 make 或相应构建工具根据这些描述执行构建任务。
make:
在Linux环境中,make是一个极其重要的工具,主要用于自动化构建过程,尤其是软件项目。它基于一个名为Makefile的文件来决定需要执行哪些任务。下面我将详细解释make命令的使用和功能。
cmake:
CMake是一个开源的、跨平台的自动化构建系统,用来管理软件构建过程。它是用脚本语言编写的,主要用于工程较大的项目,可以生成各种不同构建系统的格式,比如Unix的Makefile、Windows的Visual Studio项目等。
Make常见选项的意义:
make -f custom_makefile
make -C /path/to/dir
make -j4
make -k
make -n
make -s
make -B
make --version
假设我们有一个简单的 C++ 项目,包含一个源文件 main.cpp,我们想创建一个可执行文件,同时允许用户在构建时选择是否启用调试信息和测试。
Cmake
cmake_minimum_required(VERSION 3.10)
project(SimpleProject)
option(ENABLE_DEBUG "Enable debug information" OFF)
option(ENABLE_TESTS "Build tests" OFF)
if (ENABLE_DEBUG)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g")
endif()
if (ENABLE_TESTS)
add_subdirectory(tests)
endif()
add_executable(${PROJECT_NAME} main.cpp)
分析:
当你运行 CMake 时,你可以传递选项来覆盖默认值,例如:
mkdir build
cd build
cmake .. -DENABLE_DEBUG=ON -DENABLE_TESTS=ON
make
在这个命令中,-D 后面跟的是选项名称和值,这会覆盖 CMakeLists.txt 文件中的默认设置。
选项的意义:
• ENABLE_DEBUG: 当这个选项被开启时,你的程序将带有调试信息,这对于开发和调试阶段是非常有用的。但是,对于最终产品或性能敏感的应用,你可能不希望包含这些额外的信息,因为它可能会增加程序的大小和影响性能。
• ENABLE_TESTS: 这个选项允许你构建测试代码。在大型项目中,通常会有专门的测试代码来验证功能的正确性。通过这个选项,你可以在需要时构建和运行测试,而在不需要时避免这些额外的构建步骤,节省时间和资源。
通过这种方式,CMake 允许你以一种灵活的方式控制构建过程,适应不同的构建需求和环境。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。