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/source/core/GameMainMenu.cpp:74: undefined reference to `hgeGUI::hgeGUI()'

这只发生在我尝试将核心文件编译成静态库时。当我使用 CORE_SRCS 添加可执行文件并删除对当前编译库的依赖项时..它将正常工作..

我还尝试将 hgegui.cpp 文件复制粘贴到我的核心源目录中..并将其更改#include "..\..\include\hgegui.h"#include "hgegui.h"

之后我的链接器代码解决了这个问题,但我得到了分段错误,但我猜在上一步中链接文件是不正确的..

这是他们的 .h 文件的链接
http://trac.assembla.com/snowscape/browser/hge/include/hgegui.h

4

1 回答 1

1

看起来你在滥用${HGE_LIBRARY}and${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_LIBRARYDemoGameand的依赖关系时EntityTool,CMake 会识别${HGE_LIBRARY}and${HGE_HELPER_LIBRARY}也是依赖关系,因此您可以根据需要从target_link_libraries调用中DemoGame删除它们EntityTool


有关 and 的更多信息add_library,请target_link_libraries运行:

cmake --help-command add_library
cmake --help-command target_link_libraries
于 2012-05-24T02:36:11.490 回答