2

私はCMakeでQtの実行可能ファイルを見つける方法について素晴らしい答えを見つけました、cmakeはQt4を見つけません

CMAKE_INCLUDE_PATHをどのように使用しますか?試してみましたが、エラーが発生しました。

    cmake_minimum_required(VERSION 2.8)

set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/../cmake_modules)

project(vrvu)

find_package(OpenGL REQUIRED)(CMAKE_INCLUDE_PATH <--- this is where I'm getting an error
 C:\QtSDK\Desktop\Qt\4.8.0\msvc2010\bin)find_package(Qt4 COMPONENTS QtCore QtGui QtOpenGL REQUIRED)
include(${QT_USE_FILE})
find_package(Coin3 REQUIRED)
find_package(Quarter REQUIRED)

add_subdirectory(bullet-2.77)
add_subdirectory(starlight)

file(GLOB SOURCES "*.cpp" "*.cxx" "*.h" "*.hpp")

include_directories(${OPENGL_INCLUDE_DIR} ${QT_INCLUDE_DIR} ${COIN_INCLUDE_DIR} ${QUARTER_INCLUDE_DIR} "./bullet-2.77/src" "./starlight")
link_directories(${QT_LIB_DIR} ${COIN_LINK_DIRECTORIES} ${QUARTER_LINK_DIRECTORIES})

add_definitions(${QT_DEFINITIONS} ${COIN_DEFINITIONS} ${QUARTER_DEFINITIONS})

add_executable(vrvu ${SOURCES})
target_link_libraries(vrvu ${OPENGL_LIBRARIES} ${QT_LIBRARIES} ${COIN_LIBRARIES} ${QUARTER_LIBRARIES} LinearMath BulletCollision starlight)

長いコードでごめんなさい....ありがとう!

4

1 に答える 1

4

ここにはいくつかの問題があります。

単なるタイプミスかどうかはわかりませんが、コマンドCMAKE_INCLUDE_PATHの最後に設定する命令を追加することはできません。別のコマンドfind_packageが必要です。set

find_package(OpenGL REQUIRED)
set(CMAKE_INCLUDE_PATH "C:\\QtSDK\\Desktop\\Qt\\4.8.0\\msvc2010\\bin")
find_package(Qt4 COMPONENTS QtCore QtGui QtOpenGL REQUIRED)

バックスラッシュを使用している場合は、指定されたパスで区切り記号をエスケープする必要があることに注意してください。または、Windowsでも、二重の円記号の代わりに単一の円記号を使用できます。この場合、パスを引用符で囲むことは効果がありませんが、パスにスペースが含まれている場合に備えて、入るのは良い習慣です。


設定CMAKE_INCLUDE_PATHにより、CMakeが実行時に試行するパスfind_pathfind_file呼び出しのみのリストが拡張されます。これは呼び出しに役立ちますがfind_package、この場合はCMAKE_PREFIX_PATH、すべてのコマンドの検索パスを拡張するように設定することもできfind_XXXます。CMAKE_PREFIX_PATHこれは、実行可能ファイルを検索するときに「\ bin」が追加されるため、パスから「\bin」を削除する必要があることを意味します。

set(CMAKE_PREFIX_PATH "C:\\QtSDK\\Desktop\\Qt\\4.8.0\\msvc2010")


次に、file(GLOB SOURCES "*.cpp" "*.cxx" "*.h" "*.hpp")。これは実際にはエラーではありませんが、ファイルがソースツリーに追加または削除された場合、CMakeには「知識」がなく、再作成されないため、通常、この手法を使用してソースファイルのリストを作成することは嫌われます。走る。推奨される方法は、各ソースファイルを手動でCMakeLists.txtに追加することです。これにより、追加または削除すると、CMakeが自動的に再実行されます。

また、「SOURCES」はCMakeターゲットのプロパティも表すため、変数名の選択には適していません。


もう1つの眉をひそめる慣習は、の使用ですlink_directories。ドキュメントには、通常は必要ない理由が示されています。これは、ここに当てはまるはずです。


add_definitions線も不要かもしれません。Qtは定義を定義しますが、定義はすでに追加されているためinclude(${QT_USE_FILE})FindQt4のドキュメントを参照)、ここで2回追加しています。私はCoin3またはQuarterに精通していませんが、実際には必要なプリプロセッサ定義を生成しない可能性があります。次を追加して、内容を確認できます。

message("COIN_DEFINITIONS: ${COIN_DEFINITIONS}")
message("QUARTER_DEFINITIONS: ${QUARTER_DEFINITIONS}")

一時的に(対応するfind_package呼び出しの後)。これらが空の場合は、add_definitions通話を削除できます。


変数${COIN_LIBRARIES}を想定し、${QUARTER_LIBRARIES}これらのライブラリへのフルパスを指定すると、うまくいくはずです。

于 2012-05-13T12:44:15.163 に答える