複数の.aファイルを1つのファイルにマージするためのcmakeカスタムターゲットを作成しようとしています。私が多くのサードパーティのライブラリを持っているので(私は複雑な環境、コナン、cmakeなど...)、私はOBJECTS
libモードを使うことができないことに注意してください。CMake COMMANDシェルパラメータの置換に失敗する
だから私は
add_custom_target(combineall
COMMAND echo "extract all .o files from all lib*.a file in the static folder"
COMMAND for f in *.a ; do ar -x $f ; done
COMMAND echo "merge all .o files in the static folder"
COMMAND for f in *.o ; do ar -rs ${CMAKE_BINARY_DIR}/libmerged.a $f ; done
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/static
DEPENDS MyLib
)
次に書いたが、cmakeのはcombineall
カスタムターゲットを実行すると、私は次のようなエラーメッセージが出ます:私はそれが$f
から来ているとし
extract all .o files from all lib*.a file in the static folder /bin/sh: -c: line 1: syntax error: unexpected end of file
を。私はcmake for_each
構文を使用して、完全に異なるcmakeスクリプトを.aファイルに繰り返し書き込むことができることを知っていますが、ここでの目標はありません!
よろしく、 アレックス
それはそうのように、文字列の中にあなたのシェル変数を展開する方が良いでしょう: '*の.AでFのために。 ar -x "$ f"を実行します。完了しました。それが 'cmake'の文脈で何か変わるかどうかは分かりませんが、試してみることができます。 – Nepho
こんにちは@Nepho私はすでに試してみますが、同じ方法で失敗します。 – alexbuisson