我如何允许用户重新配置编译器使用cmake
How do I allow users to reconfigure the compiler to use with cmake?
我希望允许用户运行cmake配置工具(如ccmake或cmake-gui)来更改使用的编译器。这是必要的,因为我正在构建一个跨平台程序,该程序有时在集群上运行(因此需要具有适当MPI结构的特定于集群的编译器),但有时在非MPI模式下运行。
让我们假设编译器通常可以是平台期望的任何编译器(通常是gcc/g++,或者最坏的情况下是MSVC),但是当我们使用MPI时,我们总是知道我们需要通过mpicc/mpicxx进行编译。
我觉得下面的代码应该可以工作:
cmake_minimum_required(VERSION 2.4)
option(USE_MPI "Is this on an MPI system?" OFF)
if (USE_MPI)
message(STATUS "Setting compiler to MPIC")
set(CMAKE_CXX_COMPILER mpicxx)
set(CMAKE_C_COMPILER mpicc)
endif(USE_MPI)
project(test_project)
add_executable(testprogram test.cpp)
上面是一个简单的例子,但我相信它说明了我要做的事情。
假设mpicxx和mpicc在路径上,但这不是真正的问题。问题出现的原因是,当您运行ccmake或cmake-gui时,它会计算并按下默认选项路径"off",然后点击项目行,并将适合标准本机编译器(通常是gcc)的路径和选择写入缓存。您可以更改gui中的选项,但为时已晚,再次配置/生成不会更新缓存。即使用户打开了该选项,编译器也保持设置。
我似乎想做的是重新运行在project()行上的编译器查找例程。
有更好的方法吗?我是否误解了我应该如何设置编译器?
最好的方法,也是CMake鼓励的,是使用几个不同配置的外源构建目录。
在创建cmake缓存之后,更改编译器是非常困难的,甚至是不可能的,因此在第一次使用命令行调用cmake时直接设置选项是更明智的:
mkdir mpi-build && cd mpi-build && cmake -DUSE_MPI=ON ..
你可以使用CMAKE_TOOLCHAIN_FILE来设置你需要的编译器:
# gcc.cmake
message("We will use GCC compiler")
set(CMAKE_C_COMPILER gcc CACHE STRING "C compiler" FORCE)
set(CMAKE_CXX_COMPILER g++ CACHE STRING "C++ compiler" FORCE)
# clang.cmake
message("We will use Clang compiler")
set(CMAKE_C_COMPILER clang CACHE STRING "C compiler" FORCE)
set(CMAKE_CXX_COMPILER clang++ CACHE STRING "C++ compiler" FORCE)
使用> cmake -H. -B_builds/clang -DCMAKE_TOOLCHAIN_FILE=clang.cmake
We will use Clang compiler
-- The C compiler identification is Clang 3.5.0
-- The CXX compiler identification is Clang 3.5.0
> cmake -H. -B_builds/gcc -DCMAKE_TOOLCHAIN_FILE=gcc.cmake
We will use GCC compiler
-- The C compiler identification is GNU 4.9.0
-- The CXX compiler identification is GNU 4.9.0
例子- cmake工具链
我只是把它添加到"CMakeLists.txt",它的工作。
option(USE_MPI "Build with MPI" ON)
if(USE_MPI)
message("We will use mpi compiler")
set(CMAKE_C_COMPILER mpicc CACHE STRING "mpicc compiler" FORCE)
set(CMAKE_CXX_COMPILER mpic++ CACHE STRING "mpiC++ compiler" FORCE)
endif()
相关文章:
- 检测到 Conan 配置文件设置与 CMake 之间的编译器版本不匹配
- 如何配置VS 2012的编译器来更改基本数据类型大小?
- 配置:错误:C++编译器无法创建可执行文件
- 如何使用Microsoft Visual Studio 2017配置外部编译器,如gcc +14
- 重用编译器前端的结果,以加快多个配置/平台的C++代码编译
- 在英特尔C++编译器 (Linux) 的配置搜索路径中找不到文件可执行文件
- 如何在Qmake中配置编译器
- 有人知道如何为OpenMP配置NetBeans C 编译器吗?
- 已安装的Intel C 编译器,缺失 /位 /C 配置
- 用于优化 QtCreator 编译器的配置
- 如何在Qt Creator中配置编译器
- 如果我只在发布配置中遇到内部编译器错误,我可以看看什么来解决这个问题
- 配置 cmake 以根据环境选择编译器
- PHP PDO_ODBC配置:错误:C 编译器无法创建可执行文件
- 将库添加到调试配置-QtCreator,VC编译器
- 我如何允许用户重新配置编译器使用cmake
- 如何在Visual Studio 2012 c++中配置VIX API的编译器
- 我如何配置cmake编译一个文件两次与两个不同的编译器
- 如何配置Eclipse(或任何IDE),以便在远程SSH主机上使用Intel编译器编译c++
- USB 上C++编译器(无需安装计算机(c 驱动器、PATH 等))的可移植 Eclipse CC++ 配置