Я пишу программу в 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
И я получаю вопросы:
- Когда я генерирую источник - появляются следующие ошибки:
CMake Ошибка: Требуется ошибка, внутренняя переменная CMake не установлена, cmake может
не будет построен правильно.
Отсутствует переменная: CMAKE_EXE_LINKER_FLAGS
CMake Ошибка: Требуется ошибка, внутренняя переменная CMake не установлена, cmake может
не будет построен правильно.
Отсутствует переменная:
CMAKE_EXE_LINKER_FLAGS_DEBUG
CMake Ошибка: требуется внутренняя ошибка
Переменная CMake не установлена, возможно, cmake собран неправильно.
....
- 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"
- Наконец, он генерирует файл .obj и разрывается на шаге связывания, но мне нужен просто файл bin
Launch.dir \ Debug \ launch.obj: фатальная ошибка LNK1107
Итак, главный вопрос - может ли cmake работать с ассемблером? Если так, то существует где-то минимальный работоспособный пример?