Я создаю две цели, используя:
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 содержит настраиваемую команду.
Пытался использовать ВСЕ для настраиваемой цели, однако сначала попытайся построить ее, пропустив первые цели.
И я не могу использовать add_library или add_executable для конечной цели, поскольку они требуют указания исходных файлов.
Как правильно это делать?
===================================
Изменить: ниже приведен минимальный проверяемый исходный код. Что он пытается сделать, так это скомпилировать код (для Mac) в двух архитектурах и в качестве пост-сборки для создания универсального двоичного файла с использованием липо:
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(){}