【问题标题】:cmake check existence of compilercmake 检查编译器是否存在
【发布时间】:2013-11-13 06:07:33
【问题描述】:

我正在尝试使用 cmake 构建一个小的 C++ 代码。

我还没有g++ (我正在虚拟机操作系统上进行测试)

当我打电话给cmake . 我收到令人讨厌的错误消息。

-- The C compiler identification is GNU 4.7.2

**-- The CXX compiler identification is unknown**

-- Check for working C compiler: /usr/bin/gcc

-- Check for working C compiler: /usr/bin/gcc -- works

-- Detecting C compiler ABI info

-- Detecting C compiler ABI info - done

**CMake Error: your CXX compiler: "CMAKE_CXX_COMPILER-NOTFOUND" was not found.   Please set CMAKE_CXX_COMPILER to a valid compiler path or name.

-- Configuring incomplete, errors occurred!**

基本上,这没问题。它说发生了错误,但它说的太多了。我只是想得到一个准确而简洁的消息,说“g++ ist not installed. INSTALL it please”。

有没有办法先检查是否安装了g++,然后给出适当的消息?

【问题讨论】:

  • 请显示您遇到的错误,以便我们提供帮助
  • 所以你不想修复这个错误并且不想从你的项目中删除c++支持,你只是想改变错误信息?我认为该错误消息非常准确(:

标签: cmake


【解决方案1】:

您提供的输出表明 CMake 试图对您有所帮助。如果它对你的口味来说太冗长,也许最简单的减少它的方法是将它捕获到一个变量中,然后检查它。

您可以将下面的示例 CMake 脚本保存为 detect_cxx_compiler.cmake,并使用 cmake -P detect_cxx_compiler.cmake 调用该脚本。代码的编写方式旨在帮助 CMake 初学者,而不是为了小尺寸或处理效率。

cmake_minimum_required(VERSION 2.8.5 FATAL_ERROR)
cmake_policy(VERSION 2.8.5)

# This cmake script (when saved as detect_cxx_compiler.cmake) is invoked by:
#
#     cmake -P detect_cxx_compiler.cmake
#
# It is written for clarity, not brevity.

# First make a new directory, so that we don't mess up the current one.
execute_process(
    COMMAND ${CMAKE_COMMAND} -E make_directory detection_area
    WORKING_DIRECTORY .
)

# Here, we generate a key file that CMake needs.
execute_process(
    COMMAND ${CMAKE_COMMAND} -E touch CMakeLists.txt
    WORKING_DIRECTORY detection_area
)

# Have CMake check the basic configuration.  The output is
# actually in the form that you posted in your question, but
# instead of displaying it onscreen, we save it to a variable
# so that we can select only parts of it to print later.
execute_process(
    COMMAND ${CMAKE_COMMAND} --check-system-vars
    OUTPUT_VARIABLE the_output
    OUTPUT_STRIP_TRAILING_WHITESPACE
    WORKING_DIRECTORY detection_area
)

# Eliminate the directory, including all of the files within it that
# CMake created.
execute_process(
    COMMAND ${CMAKE_COMMAND} -E remove_directory detection_area
    WORKING_DIRECTORY .
)

# Here, you have the entire message captured as a variable.
# Uncomment this next line to convince yourself of this.
#message(STATUS "the_output = |${the_output}|.")

# Here, we search the message to see if the C++ compiler was found or not,
# and print an arbitrary message accordingly.
string(FIND "${the_output}" "CMAKE_CXX_COMPILER-NOTFOUND" scan_result)
#message(STATUS "scan_result = |${scan_result}|.")
if(NOT(-1 EQUAL "${scan_result}"))
    message(FATAL_ERROR "A C++ compiler was not detected.")
endif()

message(STATUS "A C++ compiler was detected.")

【讨论】:

    【解决方案2】:

    您应该使用 GCC(Gnu 编译器集合)前端。你应该安装 gcc-c++ 或类似的包。

    【讨论】:

    • 是的,但在这个阶段我不想这样做。目标是首先检查它的存在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多