3

Qt-Library osgQt をコンパイルしようとしています。これは、コンパイル済みパッケージで提供されていないためです (少なくとも Windows 7(x64) および MSVS 11 - x64 では提供されていません)。したがって、私はこれらの指示に従っています:

注: このライブラリは OSG ソースの一部ですが、ビルド済みバイナリの一部ではありません。osgQt ライブラリをビルドするには、OSG プロジェクト全体をダウンロードする必要があります。

I. osg 3.0.1 ソースをダウンロードします。

Ⅱ.CMake で Visual Studio ソリューションを生成します。

これを行うには、準備されたバッチ ファイルを実行できます。- OSG に依存しない VS ソリューションを作成します。(できれば十分) - ファイル ヘッダーに変数を設定する必要があります。- 実行すると、ビルド フォルダーに OpenSceneGraph.sln ファイルと src/osgQt ディレクトリが作成されます。

このバッチ ファイルは、利用できないことやその他のソフトウェア条件 (MSVS 2008、Qt 4.7.4) のために使用できなかったため、自分で CMake を使用してビルドする必要があります。

III. Visual Studio で OpenSceneGraph.sln を開きます

IV. デバッグ win32 (または必要なその他の構成) を選択します。

V. osgQt プロジェクトを選択

Ⅵ.メニューから [Build]、[Build osgQt] を選択します

結果: osgQt lib および dll ファイル ...ビルド済みの osg ライブラリの横にコピーします。

しかし、2番目のステップで問題が発生しています:

CMake 2.8.11.2 を使用すると、次のエラーが表示されます。

CMake Error at D:/Programme/QT/5.1.0/msvc2012_64_opengl/lib/cmake/Qt5Gui/Qt5GuiConfigExtras.cmake:14 (message):
Failed to find "glu32" in "".
Call Stack (most recent call first):
D:/Programme/QT/5.1.0/msvc2012_64_opengl/lib/cmake/Qt5Gui/Qt5GuiConfigExtras.cmake:48 (_qt5gui_find_extra_libs)
D:/Programme/QT/5.1.0/msvc2012_64_opengl/lib/cmake/Qt5Gui/Qt5GuiConfig.cmake:127 (include)
D:/Programme/QT/5.1.0/msvc2012_64_opengl/lib/cmake/Qt5Widgets/Qt5WidgetsConfig.cmake:83 (find_package)
CMakeLists.txt:570 (FIND_PACKAGE)

この指示に従う前に、他の多くの人がこの問題を抱えていたため ( http://qt-project.org/forums/viewthread/30006/ ):

それで、それは私にとってはうまくいきました(少なくともCMake構成は、まだコンパイルで実際に使用しようとはしませんでした)。再現する手順:

  1. Qt 5.1 のコンパイル済みバージョン (VS2012 用の OpenGL x64 を使用したバージョン) を使用しました。Qt 5.1 はそのままで OpenGL3.2+ プロファイルをサポートする必要があるため、これを使用しても問題ありません。もう Glew を使用する必要はないと思います。http://qt-project.org/doc/qt を参照してください。 - >5.1/qtgui/qabstractopenglfunctions.html 階層
  2. Win SDK 8.0 をインストールしました。でも7.0でもいいと思います。
  3. cmake ファイルに set (CMAKE_PREFIX_PATH “C:\Program Files (x86)\Windows Kits\8.0\Lib\win8\um\x64”) 行を追加しました。glu32.lib と同様のファイルが置かれている場所です。
  4. VS 11 win64 をジェネレーターとして使用して、cmake-gui configure&generate を実行します。

両方を試しました(同じビルドプロセスではありません):

set(CMAKE_PREFIX_PATH “D:\Programme\Microsoft SDKs\Windows\v7.0\Lib\x64”)
set(CMAKE_PREFIX_PATH “C:\Program Files (x86)\Windows Kits\8.0\Lib\win8\um\x64”)

上記のエラーと次の警告が表示されます。

CMake Warning (dev) at CMakeLists.txt:4 (set):
Syntax error in cmake code at

D:/OpenSceneGraph-3.2.0/OpenSceneGraph/CMakeLists.txt:4

when parsing string

"C:\Program
Invalid escape sequence \P

Policy CMP0010 is not set: Bad variable reference syntax is an error.  Run
"cmake --help-policy CMP0010" for policy details.  Use the cmake_policy
command to set the policy and suppress this warning.
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at CMakeLists.txt:4 (set):
Syntax error in cmake code at

D:/OpenSceneGraph-3.2.0/OpenSceneGraph/CMakeLists.txt:4

when parsing string

\Windows

Invalid escape sequence \W

Policy CMP0010 is not set: Bad variable reference syntax is an error.  Run
"cmake --help-policy CMP0010" for policy details.  Use the cmake_policy
command to set the policy and suppress this warning.
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at CMakeLists.txt:4 (set):
Syntax error in cmake code at

D:/OpenSceneGraph-3.2.0/OpenSceneGraph/CMakeLists.txt:4

when parsing string

Kits\8.0\Lib\win8\um\x64”

Invalid escape sequence \8

Policy CMP0010 is not set: Bad variable reference syntax is an error.  Run
"cmake --help-policy CMP0010" for policy details.  Use the cmake_policy
command to set the policy and suppress this warning.
This warning is for project developers.  Use -Wno-dev to suppress it.

これらの警告は他のほとんどの警告ほど無害ではなく、CMake が適切なディレクトリをまったく見つけられないことを示しているとは思いません。

これを修正する方法、または OSG 3.2.0 と Windows7(x64) 上の MSVS2012 を備えた Qt 5.1 用の osgQt のプリコンパイルされたバージョンでない場合、誰かがアイデアを持っていますか?

編集1:

Qt5GuiConfigExtras.cmake のコード

macro(_qt5gui_find_extra_libs Name Libs LibDir IncDirs)
    set(Qt5Gui_${Name}_LIBRARIES)
    set(Qt5Gui_${Name}_INCLUDE_DIRS ${IncDirs})
    foreach(_lib ${Libs})
        string(REGEX REPLACE [^_A-Za-z0-9] _ _cmake_lib_name ${_lib})
        if (NOT TARGET Qt5::Gui_${_cmake_lib_name})
            find_library(Qt5Gui_${_cmake_lib_name}_LIBRARY ${_lib}
            )
            if (NOT Qt5Gui_${_cmake_lib_name}_LIBRARY)
                if ("${ARGN}" STREQUAL "OPTIONAL")
                    break()
                else()
                    message(FATAL_ERROR "Failed to find \"${_lib}\" in \"${LibDir}\".")
                endif()
            endif()
            add_library(Qt5::Gui_${_cmake_lib_name} SHARED IMPORTED)
            set_property(TARGET Qt5::Gui_${_cmake_lib_name} APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${IncDirs})

            set_property(TARGET Qt5::Gui_${_cmake_lib_name} APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
            _qt5_Gui_check_file_exists("${Qt5Gui_${_cmake_lib_name}_LIBRARY}")
            set_property(TARGET Qt5::Gui_${_cmake_lib_name} PROPERTY IMPORTED_LOCATION_RELEASE "${Qt5Gui_${_cmake_lib_name}_LIBRARY}")

            set_property(TARGET Qt5::Gui_${_cmake_lib_name} PROPERTY IMPORTED_IMPLIB_RELEASE "${Qt5Gui_${_cmake_lib_name}_LIBRARY}")
            unset(Qt5Gui_${_cmake_lib_name}_LIBRARY CACHE)

            find_library(Qt5Gui_${_cmake_lib_name}_LIBRARY_DEBUG ${_lib}d
                PATHS "${LibDir}" NO_DEFAULT_PATH)
            if (Qt5Gui_${_cmake_lib_name}_LIBRARY_DEBUG)
                set_property(TARGET Qt5::Gui_${_cmake_lib_name} APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
                _qt5_Gui_check_file_exists("${Qt5Gui_${_cmake_lib_name}_LIBRARY_DEBUG}")
                set_property(TARGET Qt5::Gui_${_cmake_lib_name} PROPERTY IMPORTED_LOCATION_DEBUG "${Qt5Gui_${_cmake_lib_name}_LIBRARY_DEBUG}")
                set_property(TARGET Qt5::Gui_${_cmake_lib_name} PROPERTY IMPORTED_IMPLIB_DEBUG "${Qt5Gui_${_cmake_lib_name}_LIBRARY_DEBUG}")
            endif()
            unset(Qt5Gui_${_cmake_lib_name}_LIBRARY_DEBUG CACHE)
        endif()
        list(APPEND Qt5Gui_${Name}_LIBRARIES Qt5::Gui_${_cmake_lib_name})
    endforeach()
    if (NOT CMAKE_CROSSCOMPILING)
        foreach(_dir ${IncDirs})
            _qt5_Gui_check_file_exists(${_dir})
        endforeach()
    endif()
endmacro()



_qt5gui_find_extra_libs(OPENGL "GlU32;opengl32;gdi32;user32" "" "")



set(Qt5Gui_OPENGL_IMPLEMENTATION GL)

get_target_property(_configs Qt5::Gui IMPORTED_CONFIGURATIONS)
foreach(_config ${_configs})
    set_property(TARGET Qt5::Gui APPEND PROPERTY
        IMPORTED_LINK_DEPENDENT_LIBRARIES_${_config}
        ${Qt5Gui_EGL_LIBRARIES} ${Qt5Gui_OPENGL_LIBRARIES}
    )
endforeach()
unset(_configs)

前もって感謝します。

4

2 に答える 2

2

CMake では\、エスケープ文字です。実数を文字列に追加する\には、それをエスケープする必要があります。つまり、 make it\\です。

したがって、次のことを行う必要があります。

set(CMAKE_PREFIX_PATH "D:\\Programme\\Microsoft SDKs\\Windows\\v7.0\\Lib\\x64")

/または、 Windows の場合でも、パスの区切り文字を に変更できます。

set(CMAKE_PREFIX_PATH "D:/Programme/Microsoft SDKs/Windows/v7.0/Lib/x64")
于 2013-09-06T20:10:18.947 に答える