主页 > 创业  > 

CMake编译工具

CMake编译工具

在使用 CMake 时,你可以通过指定工具链文件来设置编译器(如 GCC、G++ 或 Clang)。以下是具体步骤:

1. 创建工具链文件

首先,创建一个工具链文件(例如 toolchain.cmake),并在其中指定编译器路径和选项。

# toolchain.cmake # 设置 C 编译器 set(CMAKE_C_COMPILER /path/to/gcc) # 或者 /path/to/clang # 设置 C++ 编译器 set(CMAKE_CXX_COMPILER /path/to/g++) # 或者 /path/to/clang++ # 设置其他工具链选项(可选) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall") 2. 使用工具链文件

在运行 CMake 时,通过 -DCMAKE_TOOLCHAIN_FILE 参数指定工具链文件。

cmake -DCMAKE_TOOLCHAIN_FILE=/path/to/toolchain.cmake -S /path/to/source -B /path/to/build 3. 直接指定编译器(不推荐)

如果你不想使用工具链文件,也可以在命令行中直接指定编译器:

cmake -DCMAKE_C_COMPILER=/path/to/gcc -DCMAKE_CXX_COMPILER=/path/to/g++ -S /path/to/source -B /path/to/build 4. 检查编译器

在配置完成后,可以通过以下命令检查编译器是否正确设置:

cmake --build /path/to/build --verbose 示例

假设你使用 Clang 作为编译器,工具链文件 toolchain.cmake 可以这样写:

# toolchain.cmake set(CMAKE_C_COMPILER /usr/bin/clang) set(CMAKE_CXX_COMPILER /usr/bin/clang++) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")

然后在命令行中运行:

cmake -DCMAKE_TOOLCHAIN_FILE=/path/to/toolchain.cmake -S . -B build

这样,CMake 就会使用 Clang 作为编译器。

总结 工具链文件:推荐使用工具链文件来管理编译器设置。命令行指定:可以直接在命令行中指定编译器,但不推荐用于复杂项目。检查设置:配置完成后,检查编译器是否正确设置。

通过这些步骤,你可以轻松地在 CMake 中设置编译器。


在 CMake 中,默认的编译器取决于系统的环境变量(如 PATH)和 CMake 的默认行为。以下是关于默认编译器以及如何获取当前使用的编译器的详细说明:


1. CMake 默认的编译器

CMake 默认会根据系统的环境变量 PATH 来查找可用的编译器。通常情况下:

在 Linux 或 macOS 上,默认的 C 编译器是 gcc,C++ 编译器是 g++。在 Windows 上,默认的编译器可能是 MSVC(如果安装了 Visual Studio),或者 MinGW 的 gcc 和 g++(如果安装了 MinGW)。

CMake 会优先选择系统中最常用的编译器。如果你安装了多个编译器(例如 GCC 和 Clang),CMake 会选择第一个在 PATH 中找到的编译器。


2. 如何获取当前使用的编译器

在 CMake 中,你可以通过以下方式获取当前使用的编译器:

方法 1:在 CMake 配置时输出编译器信息

在 CMakeLists.txt 中添加以下内容,可以在配置时打印当前使用的编译器:

message(STATUS "CMAKE_C_COMPILER = ${CMAKE_C_COMPILER}") message(STATUS "CMAKE_CXX_COMPILER = ${CMAKE_CXX_COMPILER}")

运行 CMake 配置时,你会看到类似以下的输出:

-- CMAKE_C_COMPILER = /usr/bin/gcc -- CMAKE_CXX_COMPILER = /usr/bin/g++ 方法 2:查看 CMake 缓存文件

CMake 会将编译器路径存储在缓存文件 CMakeCache.txt 中。你可以在构建目录中打开该文件,搜索 CMAKE_C_COMPILER 和 CMAKE_CXX_COMPILER,例如:

grep CMAKE_C_COMPILER CMakeCache.txt grep CMAKE_CXX_COMPILER CMakeCache.txt

输出示例:

CMAKE_C_COMPILER:FILEPATH=/usr/bin/gcc CMAKE_CXX_COMPILER:FILEPATH=/usr/bin/g++ 方法 3:在命令行中查询

在配置完成后,你可以通过以下命令查询当前使用的编译器:

cmake --build /path/to/build --verbose

这会显示详细的构建信息,包括使用的编译器。


3. 如何修改默认编译器

如果你希望修改默认的编译器,可以通过以下方式:

方法 1:设置环境变量

在运行 CMake 之前,设置环境变量 CC 和 CXX:

export CC=/path/to/clang export CXX=/path/to/clang++ cmake -S . -B build 方法 2:在 CMake 命令行中指定

直接在 CMake 命令行中指定编译器:

cmake -DCMAKE_C_COMPILER=/path/to/clang -DCMAKE_CXX_COMPILER=/path/to/clang++ -S . -B build 方法 3:使用工具链文件

创建一个工具链文件(如 toolchain.cmake),并在其中指定编译器:

set(CMAKE_C_COMPILER /path/to/clang) set(CMAKE_CXX_COMPILER /path/to/clang++)

然后在命令行中指定工具链文件:

cmake -DCMAKE_TOOLCHAIN_FILE=/path/to/toolchain.cmake -S . -B build
4. 总结 默认编译器:CMake 默认使用系统 PATH 中的第一个可用编译器(通常是 GCC 或 Clang)。获取当前编译器:可以通过 message 输出、查看 CMakeCache.txt 或使用 --verbose 构建命令来获取当前使用的编译器。修改编译器:通过环境变量、命令行参数或工具链文件可以修改默认编译器。

通过这些方法,你可以轻松管理和检查 CMake 中使用的编译器。


参考/home/mi/local/cmake_test/CMakeFiles/3.31.5/CMakeCCompiler.cmake

set(CMAKE_C_COMPILER "/usr/bin/cc") set(CMAKE_C_COMPILER_ARG1 "") set(CMAKE_C_COMPILER_ID "GNU") set(CMAKE_C_COMPILER_VERSION "13.1.0") set(CMAKE_C_COMPILER_VERSION_INTERNAL "") set(CMAKE_C_COMPILER_WRAPPER "") set(CMAKE_C_STANDARD_COMPUTED_DEFAULT "17") set(CMAKE_C_EXTENSIONS_COMPUTED_DEFAULT "ON") set(CMAKE_C_STANDARD_LATEST "23") set(CMAKE_C_COMPILE_FEATURES "c_std_90;c_function_prototypes;c_std_99;c_restrict;c_variadic_macros;c_std_11;c_static_assert;c_std_17;c_std_23") set(CMAKE_C90_COMPILE_FEATURES "c_std_90;c_function_prototypes") set(CMAKE_C99_COMPILE_FEATURES "c_std_99;c_restrict;c_variadic_macros") set(CMAKE_C11_COMPILE_FEATURES "c_std_11;c_static_assert") set(CMAKE_C17_COMPILE_FEATURES "c_std_17") set(CMAKE_C23_COMPILE_FEATURES "c_std_23") set(CMAKE_C_PLATFORM_ID "Linux") set(CMAKE_C_SIMULATE_ID "") set(CMAKE_C_COMPILER_FRONTEND_VARIANT "GNU") set(CMAKE_C_SIMULATE_VERSION "") set(CMAKE_AR "/usr/bin/ar") set(CMAKE_C_COMPILER_AR "/usr/bin/gcc-ar-13") set(CMAKE_RANLIB "/usr/bin/ranlib") set(CMAKE_C_COMPILER_RANLIB "/usr/bin/gcc-ranlib-13") set(CMAKE_LINKER "/usr/bin/ld") set(CMAKE_LINKER_LINK "") set(CMAKE_LINKER_LLD "") set(CMAKE_C_COMPILER_LINKER "/usr/bin/ld") set(CMAKE_C_COMPILER_LINKER_ID "GNU") set(CMAKE_C_COMPILER_LINKER_VERSION 2.38) set(CMAKE_C_COMPILER_LINKER_FRONTEND_VARIANT GNU) set(CMAKE_MT "") set(CMAKE_TAPI "CMAKE_TAPI-NOTFOUND") set(CMAKE_COMPILER_IS_GNUCC 1) set(CMAKE_C_COMPILER_LOADED 1) set(CMAKE_C_COMPILER_WORKS TRUE) set(CMAKE_C_ABI_COMPILED TRUE) set(CMAKE_C_COMPILER_ENV_VAR "CC") set(CMAKE_C_COMPILER_ID_RUN 1) set(CMAKE_C_SOURCE_FILE_EXTENSIONS c;m) set(CMAKE_C_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC) set(CMAKE_C_LINKER_PREFERENCE 10) set(CMAKE_C_LINKER_DEPFILE_SUPPORTED ) # Save compiler ABI information. set(CMAKE_C_SIZEOF_DATA_PTR "8") set(CMAKE_C_COMPILER_ABI "ELF") set(CMAKE_C_BYTE_ORDER "LITTLE_ENDIAN") set(CMAKE_C_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") if(CMAKE_C_SIZEOF_DATA_PTR) set(CMAKE_SIZEOF_VOID_P "${CMAKE_C_SIZEOF_DATA_PTR}") endif() if(CMAKE_C_COMPILER_ABI) set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_C_COMPILER_ABI}") endif() if(CMAKE_C_LIBRARY_ARCHITECTURE) set(CMAKE_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") endif() set(CMAKE_C_CL_SHOWINCLUDES_PREFIX "") if(CMAKE_C_CL_SHOWINCLUDES_PREFIX) set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_C_CL_SHOWINCLUDES_PREFIX}") endif() set(CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES "/usr/lib/gcc/x86_64-linux-gnu/13/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include") set(CMAKE_C_IMPLICIT_LINK_LIBRARIES "gcc;gcc_s;c;gcc;gcc_s") set(CMAKE_C_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-linux-gnu/13;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib") set(CMAKE_C_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "")
标签:

CMake编译工具由讯客互联创业栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“CMake编译工具