2017-01-02 14 views
-1

私は通常、CMakeとネイティブ環境を使用してUbuntuで作業しています。私のプロジェクトはコンパイルされて正常に動作します。今、私はOSXに変更し、QCustomPlotをコンパイルするときに最初にすべての私はいくつかの警告を受ける:QCustomPlot for OSXをコンパイルするには?

QCustomPlot/include/qcustomplot.h:6007:15: warning: 
     'findEnd' overrides a member function but is not marked 'override' 
     [-Winconsistent-missing-override] 
    virtual int findEnd(double sortKey, bool expandedRange=true) const; 
      ^
../QCustomPlot/include/qcustomplot.h:3830:15: note: 
     overridden virtual function is here 
    virtual int findEnd(double sortKey, bool expandedRange=true) const = 0; 

私はこの警告を抑制することができると仮定します。しかし、本当の危険を意味する可能性がある場合は、警告を抑止するのが嫌いです。 (Ubuntuの下では、警告はありません)。 なぜ警告ですか?私は、仮想関数をオーバーライドすることは、本当に珍しいことでも危険でもないと思います。

とにかく、警告はありますが、dompiles。リンクに実際の問題が表示される

[ 4%] Building CXX object QCustomPlot/CMakeFiles/libQCustomPlot.dir/libQCustomPlot_automoc.cpp.o 
[ 5%] Linking CXX shared library libQCustomPlot.dylib 
Undefined symbols for architecture x86_64: 
    "qt_assert_x(char const*, char const*, char const*, int)", referenced from: 
     QList<QCPDataRange>::at(int) const in qcustomplot.cpp.o 
     QList<QCPDataRange>::operator[](int) in qcustomplot.cpp.o 

ここで問題は何ですか? (マルチプラットフォーム開発環境を使用して、私が欠落しているファイル、コンポーネント、または同様の問題を期待していなかった。)

編集:ここでは、それを生成しCMakeのファイルがCMakeLists.txtが欠落している

set(CMAKE_AUTOMOC ON) 
set(CMAKE_INCLUDE_CURRENT_DIR ON) 
find_package(Qt5 COMPONENTS Core Widgets PrintSupport REQUIRED) 

include_directories(
     ${Qt5Widgets_INCLUDE_DIRS} 
     ${Qt5Printer_INCLUDE_DIRS} 
     include 
    ) 

add_definitions(${Qt5Widgets_DEFINITIONS} ${Qt5Printer_DEFINITIONS}) 

QT5_WRAP_CPP(qcustomplot_moc include/qcustomplot.h) 

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS} -std=c++11 -Wall") 

ADD_LIBRARY(libQCustomPlot 
    qcustomplot.cpp 
    ${qcustomplot_moc} # The MOC headers, generated 
) 

set_target_properties(libQCustomPlot 
         PROPERTIES OUTPUT_NAME QCustomPlot 
        ) 
target_include_directories(libQCustomPlot PUBLIC 
    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> 
) 
+0

前/後/代わりに/代わりにin_addition_to downvotingがあれば、私は本当にうれしいでしょう。 – katang

+0

私はdownvoteしませんでしたが、私はあなたがエラーの詳細を提供すべきだと思います: "make VERBOSE = 1"を実行して、どのライブラリがリンクされているかを確認してください。特にqt_assert_xを含むQt5Coreを探してください。 qmakeを使って何かを構築することはできますか?たとえば、QCustomPlotの例ですか?警告は心配するものではありません。 C++ 11で導入されたオーバーライド指定子の使用を提案しています。しかし、QCustomPlotは古いC++との互換性を保つと思います。 C++ 11が必要ない場合、 'set(CMAKE_CXX_STANDARD 98)'は警告を削除するはずです。 – pepan

答えて

0

行きます線

target_link_libraries(libQCustomPlot Qt5::Widgets) 

Qt documentation on compiling with CMakeを参照してください。さらに、CMakeLists.txtが3.0より古いCMakeバージョンをサポートする必要がない限り、現在の多くのコンテンツを削除することができます。 GCCは、未定義の参照に失敗しない程度

詳細はin this questionを見つけることができます

set(CMAKE_AUTOMOC ON) 
set(CMAKE_INCLUDE_CURRENT_DIR ON) 
find_package(Qt5 COMPONENTS Core Widgets PrintSupport REQUIRED) 

include_directories(include) 
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -W -Wall") 

ADD_LIBRARY(libQCustomPlot 
    qcustomplot.cpp 
) 

set_target_properties(libQCustomPlot 
         PROPERTIES OUTPUT_NAME QCustomPlot 
        ) 

target_link_libraries(libQCustomPlot Qt5::Widgets) 

target_include_directories(libQCustomPlot PUBLIC 
    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> 
) 
:それはこのようなものにすることができます。

警告は、別の機能を無効にする機能で、override specifierが不足していることに関する警告です。以下は警告を避けるでしょう:

virtual int findEnd(double sortKey, bool expandedRange=true) const override; 
+0

詳細な説明をありがとうございます。同じCMakeファイルがUbuntuでコンパイル、リンク、実行されているので、私はこの方向には検索しませんでした。 – katang

+0

include_directories()から$ {Qt5Widgets_INCLUDE_DIRS}を省略すると、エラーメッセージ 'QtCore/qglobal.h not found'が表示されます。 QT5_WRAP_CPP(qcustomplot_mocインクルード/ qcustomplot.h)を削除すると、 'QCPCurveのvtableへの未定義参照 'というエラーメッセージが表示されます。 – katang

+0

CMakeのバージョンは何ですか?何も削除しないで、target_link_libraries行を追加するだけで、すべてがコンパイルされますか? – pepan

関連する問題