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スクリプトを持たないプロジェクトに何かを追加しようとすると、何をしているのかを正確に知りたいのですが、ブロックされます。
エラーメッセージのパスは、SDL2ライブラリの* IMPORTED_LOCATION *に割り当てられたものです。ライブラリをSDL2にリンクし、SDL2を削除する場合は、このリンクを* PRIVATE *としてリンクすると、実行可能ファイルには伝播されません。 – Tsyvarev
@TsyvarevレンダリングライブラリのTARGET_LINK_LIBRARIESを非公開でSDL2にリンクするように変更しましたが、エラーがTestenからレンダリングに移動したようでした。 – UebelAndre