Ответ 1
Этот ответ был предоставлен мне в списке рассылки CMake, и он работал как шарм:
Посмотрите на следующий ${CMAKE_SOURCE_DIR}/cpo
script:
#!/bin/sh
d=$1; shift
while [ "$1" != "--" ]; do
cp $1 $d/$(basename $1); shift
done
Теперь посмотрим на следующий CMakeLists.txt:
CMAKE_MINIMUM_REQUIRED(VERSION 2.8 FATAL_ERROR)
PROJECT(CPO C)
FILE(WRITE ${CMAKE_BINARY_DIR}/f.c "void f(void){}\n")
ADD_LIBRARY(f SHARED f.c)
SET_TARGET_PROPERTIES(f PROPERTIES RULE_LAUNCH_LINK
"${CMAKE_SOURCE_DIR}/cpo ${CMAKE_BINARY_DIR} <OBJECTS> --"
)
Запуск script "cpo" делает целевое "f" создавать объектные файлы в
каталог передан как первый параметр вместо библиотеки;
все остальное должно быть обычным делом. Ключом является script
доступ к заполнителю <OBJECTS>
, поэтому он может работать на объекте
файлов, а фактическая ссылка после "-" игнорируется. Что
путь, вы можете использовать все возможности CMake для компиляции и
перехват справа до того, как происходит соединение. ИМО, что довольно чистый
решение, которое должно быть легко адаптировано к вашим потребностям; Обратная сторона
заключается в том, что использование RULE_LAUNCH_LINK
ограничено генераторами Makefile
.