Как правильно добавить код .asm в сборку? - PullRequest
0 голосов
/ 04 января 2019

Я пишу программу в NASM и хочу использовать cmake в качестве движка сборки.

В настоящее время я использую его следующим образом:

execute_process (
    COMMAND C:/NASM/x32/nasm.exe -f bin launch.asm -o ${CMAKE_CURRENT_BINARY_DIR}/Launch
    WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
)

Но есть одна проблема: сборка launch.asm происходит постоянно, даже если она не меняется. Как избежать этого и построить только если launch.as изменился?

UPD1 : при записи vre ниже я делаю следующий файл cmake -

CMAKE_MINIMUM_REQUIRED(VERSION 3.12.0)
project(Launch LANGUAGES ASM_NASM)

enable_language(ASM_NASM)
SET(ASM_DIALECT "-NASM")
set(CMAKE_ASM_NASM_FLAGS "-f bin")

add_executable(${PROJECT_NAME} launch.asm)
set_target_properties(${PROJECT_NAME} PROPERTIES LINKER_LANGUAGE NASM) 

Я генерирую источники со следующими строками:

cmake .. -G"Visual Studio 15 2017"
cmake --build . --target ALL_BUILD

И я получаю вопросы:

  1. Когда я генерирую источник - появляются следующие ошибки:

CMake Ошибка: Требуется ошибка, внутренняя переменная CMake не установлена, cmake может не будет построен правильно. Отсутствует переменная: CMAKE_EXE_LINKER_FLAGS

CMake Ошибка: Требуется ошибка, внутренняя переменная CMake не установлена, cmake может не будет построен правильно. Отсутствует переменная: CMAKE_EXE_LINKER_FLAGS_DEBUG

CMake Ошибка: требуется внутренняя ошибка Переменная CMake не установлена, возможно, cmake собран неправильно. ....

  1. NASM запускается неправильно - я хочу сгенерировать bin, но есть добавить win32

_NASM: Сборка launch.asm cmd.exe / D / C "C: \ Users \ AeroSun \ AppData \ Local \ Temp \ tmp0a9e10beedeb4b9986b66e79724488ee.cmd" "C: /NASM/x64/nasm.exe" -o Launch.dir \ Debug \ launch.obj -fwin32 -DCMAKE_INTDIR = "Отладка" -f bin "L: \ DevProj \ Astra \ src \ Ker nel \ Launch \ Ix86x64 \ launch.asm"

  1. Наконец, он генерирует файл .obj и разрывается на шаге связывания, но мне нужен просто файл bin

Launch.dir \ Debug \ launch.obj: фатальная ошибка LNK1107

Итак, главный вопрос - может ли cmake работать с ассемблером? Если так, то существует где-то минимальный работоспособный пример?

...