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}${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_librariesDemoGameEntityTool


add_libraryおよびの 詳細については、以下target_link_librariesを実行してください。

cmake --help-command add_library
cmake --help-command target_link_libraries
于 2012-05-24T02:36:11.490 に答える