2012-05-13 36 views
2

我發現如何讓發現Qt中與C進行可執行文件有很大的答案,cmake not finding Qt4CMake的,Qt和CMAKE_INCLUDE_PATH

如何使用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) 

對不起,長代碼....謝謝!

+0

爲什麼downvote沒有解釋?沒有幫助。 – Fraser

回答

4

這裏有幾個問題。

我不知道,如果它只是一個錯字,但你不能只追加指令設置CMAKE_INCLUDE_PATHfind_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命令的搜索路徑。它意味着可執行文件的搜索時,你需要從路徑剝奪「\ BIN」,因爲它是附加在CMAKE_PREFIX_PATH

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目標的屬性。


另一個皺起了眉頭,在實踐中是使用link_directories。該文件指出了通常不需要的原因,這裏應該是這種情況。


add_definitions線也可能是不必要的。 Qt確實定義了定義,但是當你做了include(${QT_USE_FILE})(見the documentation for FindQt4)時,它們已經被添加了,所以你在這裏添加了兩次。我對Coin3或Quarter不熟悉,但它們實際上可能不會生成任何必需的預處理器定義。您可以通過增加檢查的內容:

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

暫時(對應find_package來電之後)。如果這些爲空,您可以刪除add_definitions呼叫。


假設變量${COIN_LIBRARIES}${QUARTER_LIBRARIES}指定完整路徑,這些庫的話,我想你應該是好去。