Я признаю, что у меня был поиск 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
. Обратите внимание, что это будет работать только с генераторами Makefile от CMake.
Отличный ответ! Я не знал о CMAKE_C_COMPILE_OBJECT. – loz
Я выполнил более крупный проект и, кажется, генерирует сборные файлы с расширением «o.s» и «o.S.original», потому что я считаю, что
@loz. Это проблема с [правилами расширения] CMake (https://cmake.org/Wiki/CMake_Useful_Variables#Expansion_Rules). У них нет чего-то только для «имени источника», поэтому я не могу ссылаться/создавать что-то обычное в двоичном каталоге вывода. В качестве резервного я расширил выходной путь объекта. – Florian