构建 C 项目
本指南涵盖的内容 #
有关语言版本和其他构建环境特定信息,请访问我们的参考页面
本指南涵盖了特定于 C 项目的构建环境和配置主题。请务必先阅读我们的 教程 和 通用构建配置 指南。
C 项目的 CI 环境 #
Travis CI 虚拟机是 64 位的,并提供以下版本的
- gcc
- clang
- 核心 GNU 构建工具链(autotools、make)、cmake、scons
Travis CI 上的 C 项目默认假定您使用 Autotools 和 Make。
有关虚拟机上的精确版本,请查阅构建日志中的“构建系统信息”。
依赖项管理 #
由于社区中关于依赖项管理没有占主导地位的约定,因此 Travis CI 会跳过 C 项目的依赖项安装。
如果在测试运行之前需要安装依赖项,请覆盖 .travis.yml
中的 install:
键。
install: make get-deps
请参阅 构建配置指南 以了解更多信息。
选择要测试的编译器 #
您可以针对 GCC 或 Clang 或两者都进行项目测试。为此,请使用 .travis.yml
中的 compiler:
键指定要使用的编译器。例如,要使用 Clang 构建
compiler: clang
或 GCC 和 Clang
compiler:
- clang
- gcc
针对两个编译器进行测试将在构建矩阵中创建(至少)两行。对于每一行,Travis CI C 构建器都将导出 CC
和 CC_FOR_BUILD
环境变量以指向 gcc
或 clang
。
在 macOS 上,gcc
是 clang
的别名。设置特定的 GCC 版本 以在 macOS 上使用 GCC。
OpenMP 项目 #
OpenMP 项目应将环境变量 OMP_NUM_THREADS
设置为一个合理的小值(例如,4)。OpenMP 检测托管硬件上的核心,而不是运行测试的虚拟机上的核心。
MPI 项目 #
默认环境变量 $CC
已知会干扰 MPI 项目。在这种情况下,我们建议取消设置它
before_install:
- test -n $CC && unset CC
C11/C++11(及更高版本)和工具链版本控制 #
如果您的项目需要与 C11、C++11 或更新的语言标准兼容的工具,则可能需要升级编译器和/或构建工具。本节专门介绍如何升级 GCC、clang 和 cmake;对于其他依赖项,请参阅 安装依赖项。
Linux 上的 GCC #
请注意,GCC 对 ISO C11 的支持已达到与 ISO C99 相同的完整性水平(在 4.9 中),并且 C++11 在 5.1 中功能齐全(C++ 语言支持在 4.8.1 中功能齐全,但标准库直到 稍后 才支持所有 C++11 功能,特别是 对 <regex>
的支持直到 4.9 才存在)。
要将 GCC 升级到更新版本,您必须从 ubuntu-toolchain-r-test
源安装相应的版本;请参见下面的示例
matrix:
include:
# works on Precise and Trusty
- os: linux
addons:
apt:
sources:
- ubuntu-toolchain-r-test
packages:
- g++-4.9
env:
- MATRIX_EVAL="CC=gcc-4.9 && CXX=g++-4.9"
# works on Precise and Trusty
- os: linux
addons:
apt:
sources:
- ubuntu-toolchain-r-test
packages:
- g++-5
env:
- MATRIX_EVAL="CC=gcc-5 && CXX=g++-5"
# works on Precise and Trusty
- os: linux
addons:
apt:
sources:
- ubuntu-toolchain-r-test
packages:
- g++-6
env:
- MATRIX_EVAL="CC=gcc-6 && CXX=g++-6"
# works on Precise and Trusty
- os: linux
addons:
apt:
sources:
- ubuntu-toolchain-r-test
packages:
- g++-7
env:
- MATRIX_EVAL="CC=gcc-7 && CXX=g++-7"
before_install:
- eval "${MATRIX_EVAL}"
macOS 上的 GCC #
在 macOS 上,gcc
是 clang
的别名,g++
是 clang++
的别名。因此,您必须将 CC 和 CXX 设置为特定的 gcc
/g++
版本
matrix:
include:
- os: osx
osx_image: xcode8
env:
- MATRIX_EVAL="CC=gcc-4.9 && CXX=g++-4.9"
- os: osx
osx_image: xcode8
env:
- MATRIX_EVAL="brew install gcc5 && CC=gcc-5 && CXX=g++-5"
- os: osx
osx_image: xcode8
env:
- MATRIX_EVAL="brew install gcc6 && CC=gcc-6 && CXX=g++-6"
- os: osx
osx_image: xcode8
env:
- MATRIX_EVAL="brew install gcc && CC=gcc-7 && CXX=g++-7"
before_install:
- eval "${MATRIX_EVAL}"
FreeBSD 上的 GCC #
Travis CI FreeBSD 镜像附带 GCC 10.0.0(默认情况下它不在基本系统中)。
要将 GCC 升级到更新版本,请从软件包中安装相应的版本;请参见下面的示例
os: freebsd
addons:
pkg:
- gcc10
env:
- CC=gcc10
- CXX=g++10
Linux 上的 Clang #
请注意,从 Clang 3.3 开始,C++11 支持已完成。
要将 Clang 升级到更新版本,您必须从 llvm-toolchain-*
源安装相应的版本(还必须引入 ubuntu-toolchain-r-test
源以进行依赖项解析);请参见下面的示例
matrix:
include:
# works on Precise and Trusty
- os: linux
addons:
apt:
sources:
- ubuntu-toolchain-r-test
- llvm-toolchain-precise-3.6
packages:
- clang-3.6
env:
- MATRIX_EVAL="CC=clang-3.6 && CXX=clang++-3.6"
# works on Precise and Trusty
- os: linux
addons:
apt:
sources:
- ubuntu-toolchain-r-test
- llvm-toolchain-precise-3.7
packages:
- clang-3.7
env:
- MATRIX_EVAL="CC=clang-3.7 && CXX=clang++-3.7"
# works on Precise and Trusty
- os: linux
addons:
apt:
sources:
- ubuntu-toolchain-r-test
- llvm-toolchain-precise-3.8
packages:
- clang-3.8
env:
- MATRIX_EVAL="CC=clang-3.8 && CXX=clang++-3.8"
# works on Trusty
- os: linux
addons:
apt:
sources:
- llvm-toolchain-trusty-3.9
packages:
- clang-3.9
env:
- MATRIX_EVAL="CC=clang-3.9 && CXX=clang++-3.9"
# works on Trusty
- os: linux
addons:
apt:
sources:
- llvm-toolchain-trusty-4.0
packages:
- clang-4.0
env:
- MATRIX_EVAL="CC=clang-4.0 && CXX=clang++-4.0"
# works on Trusty
- os: linux
addons:
apt:
sources:
- llvm-toolchain-trusty-5.0
packages:
- clang-5.0
env:
- MATRIX_EVAL="CC=clang-5.0 && CXX=clang++-5.0"
before_install:
- eval "${MATRIX_EVAL}"
macOS 上的 Clang #
在 macOS 上,clang
的版本由 osx_image
的选择控制。您可以在 此处 找到可用的 osx_image
列表。
matrix:
include:
- os: osx
osx_image: xcode10.1
- os: osx
osx_image: xcode9.4
您可以在 此处 找到 Xcode 附带的 clang
版本。
FreeBSD 上的 Clang #
Clang 是 FreeBSD 上的默认编译器
FreeBSD 附带 Clang 8.0.1
要将 Clang 升级到更新版本,请从软件包中安装相应的版本;请参见下面的示例
os: freebsd
addons:
pkg:
- llvm90
env:
- CC=/usr/local/bin/clang90 # llvm90 installs it to /usr/local/bin/clang90
- CXX=/usr/local/bin/clang++90 # llvm90 installs it to /usr/local/bin/clang++90
Clang 是 FreeBSD 上的默认编译器
CMake #
- Precise 附带 CMake 2.8.7
- Trusty 附带 CMake 3.9.2
- Xenial 附带 CMake 3.12.4
- Bionic 附带 CMake 3.12.4
- FreeBSD 附带 CMake 3.15.5
您可以从 george-edison55-precise-backports
源将 cmake 升级到 Precise 上的 3.2.3(请注意,cmake-data
软件包包含 Aptitude 不会自动解析的依赖项),例如
addons:
apt:
sources:
- george-edison55-precise-backports
packages:
- cmake-data
- cmake
在 macOS 上,cmake
的版本由 osx_image
的选择控制。
构建配置参考 #
您可以在我们的 Travis CI 构建配置参考 中找到有关 C 的构建配置格式的更多信息。