一、简介
1. XMake 和 CMake 简介:
XMake 和 CMake 都是现代的跨平台构建系统,但它们在设计和实现上有所不同。
XMake:
- 是一个基于 Lua 的构建工具,让用户能用 Lua 语言描述构建逻辑。
- 提供了交互式界面来配置和编译项目。
- 设计上更为简洁,对于不太复杂的项目可能会更加直观。
CMake:
- 是一个流行的、成熟的跨平台构建工具。
- 使用自己的脚本语言描述构建过程。
- 能生成各种构建系统的文件,例如 Makefile、Ninja、Xcode、Visual Studio 解决方案等。
- 拥有丰富的社区和大量的模块支持。
二、创建可执行程序
XMake 教学:
安装:
使用 LuaRocks 或直接从 GitHub 克隆并安装:
luarocks install xmake
或
git clone https://github.com/tboox/xmake.git
cd xmake
./install
简单的 XMake.lua 示例:
target("hello")
set_kind("binary")
add_files("src/*.c")
构建项目:
xmake
CMake 教学:
安装:
多数系统都提供了方便的包管理器来安装 CMake,例如在 Ubuntu 中:
sudo apt-get install cmake
简单的 CMakeLists.txt 示例:
cmake_minimum_required(VERSION 3.10)
project(HelloWorld)
add_executable(hello src/main.c)
构建项目:
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_options
和 target_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 的一些基本功能。它们都提供了更多的高级特性,如安装、测试、脚本、包管理等功能。如果你有关于特定功能的疑问,或想了解更多,请评论!