我想允许用户运行一个 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() 行上发生的编译器查找例程。
有一个更好的方法吗?我是否误解了我应该如何设置编译器?