0

以下を使用して 2 つのターゲットを作成しています。

add_library(tgt1 SHARED a.cpp)
add_library(tgt2 SHARED b.cpp)

両方をビルドしたら、両方のターゲットに依存するビルド後のステップを実行する必要があります。次の多くの組み合わせを試しましたが、成功しませんでした:

add_custom_target(final_tgt DEPENDS tgt1 tgt2)
add_custom_command(TARGET final_tgt POST_BUILD COMMAND <command> ARGS <args>)

build.make にカスタム コマンドが含まれていても、最終的なターゲットは単にビルドされません。

カスタム ターゲットに ALL を使用しようとしましたが、最初のターゲットが見つからず、最初にビルドしようとしました。

また、ソース ファイルを指定する必要があるため、最終ターゲットに add_library または add_executable を使用することはできません。

それを行う正しい方法は何ですか?

===================================

編集: 以下は最小限の検証可能なソース コードです。それがやろうとしているのは、コードを (Mac 用に) 2 つのアーキテクチャでコンパイルし、ポストビルドとして lipo を使用してユニバーサル バイナリを作成することです。

cmake_minimum_required(VERSION 2.8)
set(icpc_req_path "/usr/local/bin/icpc-16.0.146")

set(CMAKE_CXX_COMPILER "${icpc_req_path}")

project("CMakeTest")
set(SOURCE_FILES a.cpp)

set (TARGET_NAME "TGT")
set(TARGETS "")
set(ARCHITECTURES i386 x86_64)

foreach(ar ${ARCHITECTURES})
    set(CMAKE_CXX_FLAGS_RELEASE "")
    set(CMAKE_CXX_FLAGS_DEBUG "")
    set(CMAKE_CXX_FLAGS "")

    add_library(TGT_${ar} SHARED ${SOURCE_FILES})
    set_target_properties(${TARGET_NAME}_${ar}
        PROPERTIES COMPILE_FLAGS "-arch ${ar} -xSSE3")
    set_target_properties(${TARGET_NAME}_${ar}
        PROPERTIES LINK_FLAGS "-arch ${ar}")
    set(TARGETS "${TARGETS};lib${TARGET_NAME}_${ar}.dylib")
endforeach(ar)

message("Targets: ${TARGETS}")
add_custom_target(${TARGET_NAME} DEPENDS ${TARGETS})
add_custom_command(TARGET ${TARGET_NAME} POST_BUILD
     COMMAND "lipo"
     ARGS "-create" ${TARGETS} "-output" "${TARGET_NAME}.dylib")

a.cpp の内容は次のとおりです。

int main(){}
4

2 に答える 2