2012-05-24 333 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会为图书馆工作。谢谢 –