【问题标题】:Cmake doesn't honour -D CMAKE_CXX_COMPILER=g++Cmake 不尊重 -D CMAKE_CXX_COMPILER=g++
【发布时间】:2012-11-30 20:52:21
【问题描述】:

我正在尝试强制 cmake 使用 g++ 构建我的 cpp 代码,因为默认情况下它使用 clang。所以我使用:cmake -D CMAKE_CXX_COMPILER=g++ ../src/CMakeLists.txt,之后 cmake 检查 gcc 和 g++(成功),但仍然 make VERBOSE=1 产生

/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

【问题讨论】:

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

标签: c++ g++ cmake


【解决方案1】:

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

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

我认为仅在第一次运行时使用该变量的原因是因为以后更改它可能会使已构建的所有内容(包括配置检查)无效,因此 cmake 无论如何都必须从头开始。

【讨论】:

  • 谢谢 - 这让我好几次了。如果 cmake 有一个“干净”选项,那就太好了。
  • 只删除CMakeCache.txt 就足够了。
【解决方案2】:

我是这样做的:

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

【讨论】:

  • 也不起作用... echo $CXX yields /usr/bin/g++,但是在编译时我仍然看到 /usr/bin/c++ 被使用:|
猜你喜欢
  • 1970-01-01
  • 2018-09-08
  • 1970-01-01
  • 1970-01-01
  • 2015-10-03
  • 2021-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多