web-dev-qa-db-ja.com

cmakeで外部プロジェクトをビルドするときにインストール手順を作成しない方法

Cmake ExternalProject_Addコマンドで依存関係プロジェクトを構築しています:

include(ExternalProject)
...
set(COMMON_BASE_PROJECT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../CommonBase)

ExternalProject_Add(CommonBaseProject
  SOURCE_DIR ${COMMON_BASE_PROJECT_DIR}
  BINARY_DIR ${COMMON_BASE_PROJECT_DIR}/build
  INSTALL_COMMMAND ""
)   

include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
include_directories(${COMMON_BASE_PROJECT_DIR}/include)

add_library(
    ${LIBRARY_NAME}
    SHARED
    ${SRC_FILES}
    ${INCLUDE_FILES}
)

target_link_libraries (Bios ${COMMON_BASE_PROJECT_DIR}/build/libCommonBase.dll)
add_dependencies(Bios CommonBaseProject)

しかし、エラーが発生します:

[100%] Linking CXX shared library libCommonBase.dll
[100%] Built target CommonBase
[ 50%] Performing install step for 'CommonBaseProject'
make[3]: *** No rule to make target 'install'.  Stop.

インストール手順を行う必要がないので、私の質問は、それを無効にする方法ですか?

17
Vyacheslav

STEP_TARGETS buildを使用してビルドステップのターゲットを生成し、この特定のターゲットに依存関係を追加できます。ステップターゲットの名前は<external-project-name>-<step-name>であるため、この場合、ビルドステップを表すターゲットの名前はCommonBaseProject-buildになります。

また、CommonBaseProjectをEXCLUDE_FROM_ALL TRUEを使用して「すべて」のターゲットから除外することもできます。

ExternalProject_Add(CommonBaseProject
  SOURCE_DIR ${COMMON_BASE_PROJECT_DIR}
  BINARY_DIR ${COMMON_BASE_PROJECT_DIR}/build
  STEP_TARGETS build
  EXCLUDE_FROM_ALL TRUE
)

add_dependencies(Bios CommonBaseProject-build)
11
Paweł Bylica

あなたはそれをほとんど持っていました:INSTALL_COMMAND ""の代わりに

    INSTALL_COMMAND cmake -E echo "Skipping install step."
10
James Hirschorn

すでに回答されているあなたの質問には関係ありませんが、私の場合は次のようになりましたExternalProject_Addディレクティブ:

ExternalProject_Add(external_project
    # [...]
    # Override build/install command
    BUILD_COMMAND ""
    INSTALL_COMMAND
        "${CMAKE_COMMAND}"
        --build .
        --target INSTALL    # Wrong casing for "install" target
       --config ${CMAKE_BUILD_TYPE}
)

この場合、cmakeは非常によく似たエラー(*** No rule to make target 'INSTALL')ですが、この場合、不適切な大文字のINSTALLターゲットを探しているのは外部プロジェクトです。代わりに、正しい大文字小文字はinstallです。どうやら、これはMSVCを使用するWindowsでは機能しましたが、UNIXオペレーティングシステムでは機能しません。

0
ceztko