アンドロイドmkファイルでは、LOCAL_FILTER_ASMでアセンブリファイルを生成した直後にシェルコマンドを呼び出すことができます。cmakeでasmファイル生成後にシェルコマンドを呼び出す
私はcmakeに似たようなものを持つ回避策があるのだろうか?
アンドロイドmkファイルでは、LOCAL_FILTER_ASMでアセンブリファイルを生成した直後にシェルコマンドを呼び出すことができます。cmakeでasmファイル生成後にシェルコマンドを呼び出す
私はcmakeに似たようなものを持つ回避策があるのだろうか?
私は参照what LOCAL_FILTER_ASM
doesを持っていたと認めます。
だから、次はコードの私の作品(ちょうどCMakeのでは同様の機能)である:
cmake_minimum_required(VERSION 3.0)
project(LocalFilterASM C ASM)
set(LOCAL_FILTER_ASM "cp")
string(
REPLACE
"<ASSEMBLY_SOURCE>" "<OBJECT>.S.original"
MY_CREATE_ASSEMBLY "${CMAKE_C_CREATE_ASSEMBLY_SOURCE}"
)
string(
REPLACE
"<SOURCE>" "<OBJECT>.S"
MY_COMPILE_OBJECT "${CMAKE_ASM_COMPILE_OBJECT}"
)
set(
CMAKE_C_COMPILE_OBJECT
"${MY_CREATE_ASSEMBLY}"
"${LOCAL_FILTER_ASM} <OBJECT>.S.original <OBJECT>.S"
"${MY_COMPILE_OBJECT}"
)
file(WRITE main.c "int main(void) { return 0; }")
add_executable(${PROJECT_NAME} main.c)
これは、単に既存のcmakeのコンパイラ規則の一部を取り、CMAKE_C_COMPILE_OBJECT
のための新しいマルチラインのルールにそれを兼ね備えています。これはCMakeのmakefileジェネレータでのみ動作することに注意してください。
あなたが現在持っているものの例を提供していないので、言うことは非常に難しいです。
しかし、add_custom_command()関数を使用して、前後のスクリプトを任意のターゲットに追加することができます(必要な構文については、「ビルドイベント」セクションのページの下部を参照)。
お返事ありがとうございます。私はadd_custom_command()を使用しようとしましたが、ビルドイベントは3つしかありません(prebuild、prelink、postbuild)。私の場合は、asmファイルの生成直後にトリガされるビルドイベントが必要です。 – loz
あなたの現在のシェイクルールは表示されていないので、あまり言い表せません。私は(少なくとも)AndroidのmakefileやLOCAL_FILTER_ASMに慣れていません。生成されたアセンブリで動作し、その操作の結果を使用してオブジェクトファイルを生成するすべてのソースファイルのコンパイルの途中に何らかの操作を挿入しようとしていますか? – MadScientist
すばらしい答え!私はCMAKE_C_COMPILE_OBJECTについて知りませんでした。 – loz
私は大きなプロジェクトで実行し、 "o.s"と "o.Soriginal"拡張子のアセンブリファイルを生成するようです。なぜなら、
@lozそれはCMakeの[拡張ルール](https://cmake.org/Wiki/CMake_Useful_Variables#Expansion_Rules)の問題です。彼らは "ソース名のみ"のための何かを持っていないので、バイナリ出力ディレクトリでカスタムを参照/作成することはできません。フォールバックとして、オブジェクトの出力パスを拡張しました。 – Florian