Cmake不支持使用-D CMAKE_CXX_COMPILER=g++命令。

16

我想强制使用g++编译我的cpp代码,因为默认情况下它使用的是clang。所以我使用:cmake -D CMAKE_CXX_COMPILER=g++ ../src/CMakeLists.txt,然后cmake检查了gcc和g++(成功),但是make VERBOSE = 1却没有使用g++编译。

/usr/bin/c++     -o CMakeFiles/trial_cpp.dir/trial.cpp.o -c "/Users/Kuba/Code/Sketchpad/Trial     project/src/trial.cpp"
Linking CXX executable trial_cpp
/opt/etlocal/bin/cmake -E cmake_link_script CMakeFiles/trial_cpp.dir/link.txt --verbose=1
/usr/bin/c++    -Wl,-search_paths_first -Wl,-headerpad_max_install_names   CMakeFiles/trial_cpp.dir/trial.cpp.o  -o trial_cpp 

由于它调用的是 /usr/bin/c++ 而不是 /usr/bin/g++,因此我认为它仍在使用 clang。你知道问题出在哪里吗?我知道我有 g++ 并且它在 /usr/bin/ 中。我正在运行 Mac OS X 10.8.2


3
也许是一个愚蠢的问题,但很多人会忘记。在使用该配置选项运行cmake之前,您是否删除了构建目录的全部内容?一旦该变量为给定的构建目录设置一次(自动或手动),它将在未来的运行中被忽略,因此该选项必须在第一次运行时使用,而且仅在第一次运行时使用。 - John5342
@John5342 - 成功了!我是一个cmake的新手,所以不知道需要清理构建目录。谢谢你。 - Puchatek
由于我偶然正确了,所以我已经将其作为正确答案添加,并包含了源。当我第一次学习cmake时,我发现手册和引用页面非常有用。 - John5342
2个回答

16

CMAKE_CXX_COMPILER只能在给定的构建目录第一次运行cmake时设置。在随后的运行中,它将被忽略。为了更改CMAKE_CXX_COMPILER,您需要首先删除构建目录的内容,然后再使用该选项重新运行cmake。

来源:http://www.cmake.org/Wiki/CMake_Useful_Variables

我认为之所以只在第一次运行时使用该变量是因为后期更改可能会使已经构建的所有内容无效,包括配置检查,因此cmake必须从头开始。


谢谢 - 这让我遇到了几次。如果cmake有一个“清除”选项就好了。 - ccook
仅删除 CMakeCache.txt 应该就足够了。 - Jeff Hammond

2
我会这样做代替:

CXX=/usr/bin/g++ cmake ../src/CMakeLists.txt

1
还是不起作用... echo $CXX 返回 /usr/bin/g++,但编译时仍然看到使用的是 /usr/bin/c++ :| - Puchatek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接