Ninjaの実行中にこの忍者構築エラーが発生しました。私のCMAKEビルドコマンドはcmake -G"Ninja" -DCMAKE_BUILD_TYPE=Release
です。CMAKEのExternalProject_add依存関係へのリンク
ninja: error: 'ext_deps/api/src/ext_api/build/src/lib/libapi.a', needed by 'Project', missing and no known rule to make it
のは、私のプロジェクトは、(GitHubのからCMAKE経由でダウンロード)APIと実装(プロジェクト)で構成されて言ってみましょう。
The layout would look like:
Project/
-- build/
-- cmake/modules
----- ExternalDep.cmake
----- FindAPI.cmake
-- CMakeLists.txt
-- src/
---- CMakeLists.txt
-- include/
はのは、トップレベルCMakeLists.txt
に私は設定を構築する設定の通常の業務を行うことを言ってみましょう、CXXフラグ、エトセトラ、その後、私はinclude(ExternalDep)
呼んで、「API」ライブラリは、ユーザーのであればチェックしますシステム(CMAKE経由でダウンロードされていない場合) src/CMakeLists.txt
で 私は私がいる最初の問題は、「API」ライブラリもダウンロードして構築することができます前に、私は私が掲示忍者のビルドエラーを得ることである
target_link_libraries(${PROJECT_NAME} PRIVATE ${API_LIBRARY})
を使用してAPIライブラリとリンクしよう上記。私はプロジェクトの実行可能ファイルと "API"ライブラリとのリンクを追加しようとする前に、ExternalDep.cmake
が含まれていると肯定的です。
set(EXT_DEPS_PREFIX "ext_deps")
ExternalProject_Add(ext_lib
GIT_REPOSITORY "https://github.com/fake/api.git"
GIT_TAG "master"
PREFIX "${CMAKE_BINARY_DIR}/${EXT_DEPS_PREFIX}/api"
TMP_DIR "${CMAKE_BINARY_DIR}/${EXT_DEPS_PREFIX}/api-tmp"
STAMP_DIR "${CMAKE_BINARY_DIR}/${EXT_DEPS_PREFIX}/api-stamp"
CMAKE_ARGS -DCMAKE_BUILD_TYPE=Release
SOURCE_DIR "${CMAKE_BINARY_DIR}/${EXT_DEPS_PREFIX}/api/ext_api"
BINARY_DIR "${CMAKE_BINARY_DIR}/${EXT_DEPS_PREFIX}/api/ext_api-build"
BUILD_ALWAYS true
TEST_COMMAND "")
add_dependencies(ext_projects ext_api)
set(API_LIBRARY "${CMAKE_BINARY_DIR}/${EXT_DEPS_PREFIX}/api/ext_api-build/src/lib/libapi.a")
「ExternalProject_Add」は、**ビルドステージ**でプロジェクトをビルドします。しかし、 'FindXXX.cmake'は、* configureステージ*に既にXXXプロジェクトがインストールされていることを期待しています。 configure段階でプロジェクトをビルドしたい場合は 'execute_process()'を使います。 – Tsyvarev
@Tsyvarevだから私は、「忍者」の代わりに 'Unix Makefiles'を私の生成したビルドファイルとして使うだけで済むということを知りました。なぜこれが当てはまるのか分かりませんが、うまくいきました。 – BlazePascal