Cxxdroid 中文文档 下载 App

用 CMake 管理多文件项目 —— C++ 项目的标准构建系统

为什么用 CMake

当项目只有一个 main.cpp 时,直接在 Cxxdroid 单文件编译就行。但随着项目变大:

这时手动管理编译命令变得不可行——每次都要记住一堆 -I、-l 参数,改一个文件就要重新调命令。

CMake 解决这个问题:用一份声明式的 CMakeLists.txt 描述「我的项目需要什么」,CMake 自动生成对应的构建脚本。

Cxxdroid 里的 CMake

Cxxdroid 内置了 CMake(预编译好的 Android arm64 版本)。你创建 C++ 项目时,应用会自动生成一个最小化的 CMakeLists.txt:

cmake_minimum_required(VERSION 3.10)
project(myproject)

set(CMAKE_CXX_STANDARD 17)

add_executable(myproject main.cpp)

核心 CMake 语句速查

添加可执行文件

add_executable(mygame main.cpp utils.cpp game.cpp)

所有 .cpp 文件一起编译,链接成 mygame 可执行文件。

设置 C++ 标准

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

常见的标准选择:C++17(推荐,很多库需要)、C++20(需要新版 Clang)、C++14(最兼容)。

链接第三方库

find_package(SDL2 REQUIRED)
find_package(Boost REQUIRED COMPONENTS system filesystem)
find_package(SQLite3 REQUIRED)

target_link_libraries(mygame PRIVATE
    SDL2::SDL2
    Boost::system Boost::filesystem
    SQLite::SQLite3
)

装过的库 find_package 就能找到,不需要手动写路径。

头文件目录

target_include_directories(mygame PRIVATE include/)

如果你的头文件不在默认位置(比如放在项目根目录下的 include/ 文件夹),需要显式添加。

编译选项

target_compile_options(mygame PRIVATE -Wall -Wextra -Wpedantic)
target_compile_definitions(mygame PRIVATE DEBUG_MODE=1)

-Wall -Wextra 开启更多警告(推荐始终打开),-D 添加宏定义。

一个完整的 CMakeLists.txt 示例

cmake_minimum_required(VERSION 3.14)
project(cxxdroid-sdl-game)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 查找 SDL2
find_package(SDL2 REQUIRED)

# 添加可执行文件
add_executable(game
    src/main.cpp
    src/game.cpp
    src/player.cpp
    src/render.cpp
)

# 头文件目录
target_include_directories(game PRIVATE include/)

# 链接 SDL2
target_link_libraries(game PRIVATE SDL2::SDL2)

# 编译警告
target_compile_options(game PRIVATE -Wall -Wextra)

目录结构:

项目/
├── CMakeLists.txt
├── include/
│   ├── game.h
│   ├── player.h
│   └── render.h
├── src/
│   ├── main.cpp
│   ├── game.cpp
│   ├── player.cpp
│   └── render.cpp

这份 CMakeLists.txt 在 Cxxdroid、CLion、VS Code、Linux 终端上都能直接用——你可以在手机上写好草稿,在桌面 IDE 上继续编译调试。

手动触发 CMake 配置

Cxxdroid 通常在你编译项目时自动调用 CMake。如果想手动配置,可以:

常见问题

find_package 找不到库

CMake 版本过低