2012-05-24 331 views
0
#include path 
include_directories(
${PROJECT_SOURCE_DIR}/include 
${HGE_INCLUDE_DIR} 
${IKL_INCLUDE_DIR} 
${BOOST_DIRECTORY} 
) 

#include all files 
FILE(GLOB CORE_SRCS source/core/*.cpp) 
FILE(GLOB TOOL_SRCS source/tools/*.cpp) 
FILE(GLOB GAME_SRCS source/game/*.cpp) 

#Making a compiled library 
add_library(GAMECORE_LIBRARY ${CORE_SRCS} ${HGE_LIBRARY} ${HGE_HELPER_LIBRARY}) 

#add executable 
add_executable(DemoGame ${GAME_SRCS}) 

##link executable to HGE lib 
TARGET_LINK_LIBRARIES(DemoGame ${HGE_LIBRARY} ${HGE_HELPER_LIBRARY} ${IKL_LIBRARY} GAMECORE_LIBRARY) 

if(BUILD_TOOLS) 
add_executable(EntityTool ${TOOL_SRCS}) 
TARGET_LINK_LIBRARIES(EntityTool ${HGE_LIBRARY} ${HGE_HELPER_LIBRARY} ${IKL_LIBRARY} GAMECORE_LIBRARY) 
endif(BUILD_TOOLS) 

這是我目前的cmake ..奇怪的鏈接錯誤

我得到hgeGUI類一個奇怪的鏈接錯誤
如:DemoGame /源/核心/ GameMainMenu.cpp:74:未定義的引用`hgeGUI :: hgeGUI()'

這隻發生在我嘗試將核心文件編譯成靜態庫的時候。 當我用CORE_SRCS添加可執行文件,並刪除我當前編譯的庫的依賴關係..它會正常工作..

另外我試圖將hgegui.cpp文件粘貼到我的核心源目錄..並更改#include "..\..\include\hgegui.h"#include "hgegui.h"

之後,我的鏈接代碼解決了問題,但我得到分段錯誤,但我猜的文件在上一步鏈接是不正確的..

這裏是他們的.h文件的鏈接
http://trac.assembla.com/snowscape/browser/hge/include/hgegui.h

+0

請不要加[解決]你的目標。如果您的問題得到解答,請接受最有幫助的答案。 – Mat

回答

1

看起來您正在濫用${HGE_LIBRARY}${HGE_HELPER_LIBRARY}變量。

add_library調用中,您將包含組成該庫的所有源文件。

在調用target_link_libraries時,指定鏈接目標時使用的庫或標誌。

所以,如果${HGE_LIBRARY}${HGE_HELPER_LIBRARY}指定路徑要指定爲GAMECORE_LIBRARY依賴庫,你需要做的:

add_library(GAMECORE_LIBRARY ${CORE_SRCS}) 
target_link_libraries(GAMECORE_LIBRARY ${HGE_LIBRARY} ${HGE_HELPER_LIBRARY}) 

的依賴關係是傳遞的,所以當你指定GAMECORE_LIBRARY作爲這意味着DemoGameEntityTool的依賴關係,那麼CMake認識到${HGE_LIBRARY}${HGE_HELPER_LIBRARY}也是依賴關係,所以如果需要,您可以從target_link_libraries調用DemoGameEntityTool中刪除它們。


有關add_librarytarget_link_libraries進一步信息,請運行:

cmake --help-command add_library 
cmake --help-command target_link_libraries 
+0

好的那個工作..我不知道那個target_link_library會爲圖書館工作。謝謝 –