2017-03-26 22 views
0

CMake(3.5.2)を使用してプロジェクトを開始しようとしています。私のプロジェクトでは、SDL2を使いたいです。これまでのフォルダ階層です。CMakeの静的サードパーティ(SDL2)ライブラリをインポート

PROJECT 
├── Applications 
├── External 
│   └── SDL2 
├── Games 
├── Libraries 
│ └── Rendering 
└── Tests 
    └── Testen 

私が取り組んでいるレンダリングライブラリはSDL2に依存しており、TestenはSDL2に依存しています。私はSDL2を各プラットフォーム用の静的ライブラリとして構築し、SDL2をCMakeプロジェクトにインポートする前に、動作状態のコンソールベースのテストアプリケーションを用意しました。それを追加しようとした後、私はここで

:-1: error: No rule to make target /**FULL_PATH_TO_PROJECT_DIR**/External/SDL2/SDL2-2.0.5/Xcode/SDL/Build/libSDL2.a, needed by `Tests/Testen/Testen.app/Contents/MacOS/Testen'. Stop. 

がSDL2

SET (SDL2_NAME "External::SDL2") 
SET (SDL2_LIBRARY "***ABSOLUTE_PATH_TO_LIBRARY***") 
SET (SDL2_LIBRARY_DIR "***ABSOLUTE_PATH_TO_LIBRARY_DIR***") 
SET (SDL2_INCLUDE_DIR "***ABSOLUTE_PATH_TO_SDL2_INCLUDES***") 

LINK_DIRECTORIES("${SDL2_LIBRARY_DIR}") 

ADD_LIBRARY ( 
    ${SDL2_NAME} 

    STATIC 
    IMPORTED 
    GLOBAL 
) 

SET_TARGET_PROPERTIES (
    ${SDL2_NAME} 

    PROPERTIES 

    IMPORTED_LOCATION ${SDL2_LIBRARY} 
    LINK_DIRECTORIES ${SDL2_LIBRARY_DIR} 
    INTERFACE_INCLUDE_DIRECTORIES ${SDL2_INCLUDE_DIR} 
) 

ここでレンダリングラッパー・ライブラリー

SET (LIBRARY_NAME Rendering) 

SET ( 
    HEADERS 

    Header1.h 
    Header2.h 
    Header3.h 
    Header4.h 
) 


SET ( 
    SOURCE 

    Source1.cpp 
    Source2.cpp 
    Source3.cpp 
    Source4.cpp 
) 


SET (
    LIB_DEPENDENCIES 

    SomeOtherLibraryWrittenByMe 
) 

LINK_DIRECTORIES("${***ABSOLUTE_PATH_TO_SDL2_LIBRARY_DIR***}") 

ADD_LIBRARY (
    ${LIBRARY_NAME} 

    ${SOURCE} 
    ${HEADERS} 
) 

ADD_DEPENDENCIES (
    ${LIBRARY_NAME} 

    ${LIB_DEPENDENCIES} 
) 

TARGET_LINK_LIBRARIES (
    ${LIBRARY_NAME} 

    ${LIB_DEPENDENCIES} 
    External::SDL2 
) 
ためのcmakeのリストがあるためCMakeのリストです...上困惑してしまいました

TestenのCMakeリスト(私のテストアプリケーション)

SET (APP_NAME Testen) 
SET (APP_HEADERS ***SAME_STYLE_AS_RENDERING***) 
SET (APP_SOURCE ***SAME_STYLE_AS_RENDERING***) 

LINK_DIRECTORIES("${***ABSOLUTE_PATH_TO_SDL2_LIBRARY_DIR***}") 

# Here we put together our executable 
ADD_EXECUTABLE ( 
    ${APP_NAME} 

    MACOSX_BUNDLE # Because I'm on a mac right now 

    ${APP_HEADERS} 
    ${APP_SOURCE} 
) 


ADD_DEPENDENCIES ( 
    ${APP_NAME} 

    Rendering 
) 

TARGET_LINK_LIBRARIES (
    ${APP_NAME} 

    Rendering 
) 

私のプロジェクトの目標は、プログラミングのさまざまな側面についてもっと理解することです。つまり、私は積極的にFindSDL2.cmakeなどのヘルパースクリプトの使用を避けています。おそらくそれは私の問題を解決するために必要なツールかもしれませんが、私はFind.cmakeスクリプトを持たないプロジェクトに何かを追加しようとすると、何をしているのかを正確に知りたいのですが、ブロックされます。

+0

エラーメッセージのパスは、SDL2ライブラリの* IMPORTED_LOCATION *に割り当てられたものです。ライブラリをSDL2にリンクし、SDL2を削除する場合は、このリンクを* PRIVATE *としてリンクすると、実行可能ファイルには伝播されません。 – Tsyvarev

+0

@TsyvarevレンダリングライブラリのTARGET_LINK_LIBRARIESを非公開でSDL2にリンクするように変更しましたが、エラーがTestenからレンダリングに移動したようでした。 – UebelAndre

答えて

0

私の問題は、libSDL2.aパスのタイプミスの結果であったと言うのは恥ずかしいです。しかし、@ Tsyvarevは私がSDL2をPRIVATEとしてリンクするべきであるという良い点を提起しました。私は現在、ライブラリ内でMACOSXフレームワーク関数に関数呼び出しに関するSDL2のリンカエラーを解決しようとしています。私はしばらくそれをデバッグしようとしますが、それについても質問を投稿するかもしれません。

これについて考えていただいた皆様に感謝します。 @Tsyvarevに心から感謝します:)

編集 - 私は実行可能ファイルとフレームワークをリンクしてリンカエラーを解決しました。すべてが元の状態に戻ります

関連する問題