この回答はCMake メーリング リストで私に与えられたもので、魅力的に機能しました。
次の${CMAKE_SOURCE_DIR}/cpo
スクリプトを見てください。
#!/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> --"
)
起動スクリプト「cpo」は、ターゲット「f」が、ライブラリーではなく、最初のパラメーターとして渡されたディレクトリーにオブジェクト・ファイルを生成するようにします。他のすべては通常どおりに行う必要があります。重要なのは、スクリプトの<OBJECTS>
プレースホルダーへのアクセスであるため、「--」の後の実際のリンク コマンドが無視されている間にオブジェクト ファイルを操作できます。そうすれば、リンクが行われる直前にコンパイルとインターセプトに CMake のすべての機能を使用できます。IMO、これは非常にクリーンなソリューションであり、ニーズに簡単に適応できるはずです。欠点は、 の使用がジェネレータRULE_LAUNCH_LINK
に限定されることです。Makefile