XMake 和 CMake 简介 含简单例子创建可执行程序/库

696 阅读2分钟

一、简介

1. XMake 和 CMake 简介:

XMake 和 CMake 都是现代的跨平台构建系统,但它们在设计和实现上有所不同。

XMake:

  • 是一个基于 Lua 的构建工具,让用户能用 Lua 语言描述构建逻辑。
  • 提供了交互式界面来配置和编译项目。
  • 设计上更为简洁,对于不太复杂的项目可能会更加直观。

CMake:

  • 是一个流行的、成熟的跨平台构建工具。
  • 使用自己的脚本语言描述构建过程。
  • 能生成各种构建系统的文件,例如 Makefile、Ninja、Xcode、Visual Studio 解决方案等。
  • 拥有丰富的社区和大量的模块支持。

二、创建可执行程序

XMake 教学:

  1. 安装

    使用 LuaRocks 或直接从 GitHub 克隆并安装:

    luarocks install xmake
    

    git clone https://github.com/tboox/xmake.git
    cd xmake
    ./install
    
  2. 简单的 XMake.lua 示例

    target("hello")
        set_kind("binary")
        add_files("src/*.c")
    
  3. 构建项目

    xmake
    

CMake 教学:

  1. 安装

    多数系统都提供了方便的包管理器来安装 CMake,例如在 Ubuntu 中:

    sudo apt-get install cmake
    
  2. 简单的 CMakeLists.txt 示例

    cmake_minimum_required(VERSION 3.10)
    project(HelloWorld)
    add_executable(hello src/main.c)
    
  3. 构建项目

    mkdir build
    cd build
    cmake ..
    make
    

总结:

  • XMake 可能对于简单的项目来说更直观,而且使用 Lua 语言。
  • CMake 是一个非常强大且成熟的构建系统,适用于大型项目,但其语法可能需要一段时间来适应。

三、创建库

CMake

1. 创建库

如果您想创建一个库而不是一个可执行文件,可以这样做:

add_library(my_library STATIC src/library_source.c)

此处,STATIC 指明了创建一个静态库。你也可以使用 SHARED 来创建动态库。

2. 链接库

要将库链接到您的可执行文件,使用 target_link_libraries

target_link_libraries(hello my_library)

3. 寻找包和库

CMake 提供了 find_package 来帮助查找和链接外部库:

find_package(SomeLibrary REQUIRED)
target_link_libraries(my_project SomeLibrary::SomeLibrary)

4. 设置编译选项

可以使用 target_compile_optionstarget_compile_definitions 来为特定目标设置编译选项和预处理定义:

target_compile_options(my_project PRIVATE -Wall -Wextra)
target_compile_definitions(my_project PRIVATE SOME_DEFINITION=1)

XMake

1. 创建库

与 CMake 类似,您可以使用 XMake 创建库:

target("my_library")
    set_kind("static")
    add_files("src/library_source.c")

使用 set_kind("shared") 可以创建动态库。

2. 链接库

要将库链接到您的应用程序,可以这样做:

target("hello")
    set_kind("binary")
    add_files("src/main.c")
    add_deps("my_library")

3. 添加定义和编译选项

target("hello")
    add_defines("SOME_DEFINITION=1")
    add_cxflags("-Wall", "-Wextra")

这里,add_cxflags 为 C 和 C++ 源文件添加编译选项。

4. 条件编译

XMake 支持条件编译,这可以帮助你为特定平台或环境提供特定的编译选项或源文件:

target("hello")
    on_platform("linux", function (target)
        target:add("files", "src/linux/*.c")
    end)
    on_platform("windows", function (target)
        target:add("files", "src/windows/*.c")
    end)

这只是 CMake 和 XMake 的一些基本功能。它们都提供了更多的高级特性,如安装、测试、脚本、包管理等功能。如果你有关于特定功能的疑问,或想了解更多,请评论!