19

CMake を使用してオブジェクト ファイルをビルドしようとしていますが、CMake で完全な実行可能ファイル以外のものをビルドできないようです。基本的に、次のコンパイルの結果を探しています (結果は VxWorks ターゲットにロードされ、リンクされます)。

$(CC) $(CFLAGS) $(INC_DIRS) -c src/object.c

ターゲットのプロパティを変更しようとしましたOUTPUT_NAMEが、それも役に立たないようです。

カスタム コマンドを使用してこれを回避できると思いますが、CMake が提供する優れた機能も回避しているようです。

ご協力いただきありがとうございます!

4

3 に答える 3

7

この回答は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

于 2011-03-28T16:22:26.790 に答える
2

カスタムコマンドパスに行きます。GENERATED および EXTERNAL_OBJECT ソース ファイル プロパティを設定すると、CMake 後者でのコンパイルにこれらのオブジェクト ファイルを引き続き使用できることに注意してください。

于 2011-01-22T14:17:36.120 に答える