0

cmake私は、小さな C++ コードを構築するためにいじろうとしています。

まだ持っていませんg++ (virtualbox OSでテストしています)

電話をかける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!**

基本的にはこれでOKです。エラーが発生したと表示されますが、必要以上に表示されます。「g ++がインストールされていません。インストールしてください」という正確で簡潔なメッセージを取得したいだけです。

g++がインストールされているかどうかを最初に確認してから、適切なメッセージを表示する方法はありますか?

4

2 に答える 2

0

あなたが提供した出力は、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.")
于 2013-11-02T06:15:39.313 に答える
-1

GCC (Gnu Compiler Collection) フロントエンドを使用する必要があります。gcc-c++ または同様のパッケージをインストールする必要があります。

于 2013-11-01T23:22:04.023 に答える