Как можно скомпилировать 64-битное приложение macOS с приложением NASM, используя CMake? - PullRequest
0 голосов
/ 29 сентября 2018

Достаточно взглянуть на параметр source CMAKE_ASM_NASM_OBJECT_FORMAT, однако это не так.

Я ожидал, что следующее создаст действительную конфигурацию сборки для macOSприложение, использующее формат файла macho64.

project(hello_world ASM_NASM)
set(CMAKE_ASM_NASM_OBJECT_FORMAT macho64)
add_executable(hello_world source/main.asm)

Однако при запуске make с VERBOSE=1

/usr/local/bin/nasm   -f macho -o CMakeFiles/main.dir/source/main.asm.o /hello-world/source/main.asm
/hello-world/source/main.asm:6: error: instruction not supported in 32-bit mode
/hello-world/source/main.asm:7: error: instruction not supported in 32-bit mode
/hello-world/source/main.asm:8: error: instruction not supported in 32-bit mode
/hello-world/source/main.asm:9: error: instruction not supported in 32-bit mode
/hello-world/source/main.asm:12: error: instruction not supported in 32-bit mode
/hello-world/source/main.asm:13: error: instruction not supported in 32-bit mode
make[2]: *** [CMakeFiles/main.dir/source/main.asm.o] Error 1
make[1]: *** [CMakeFiles/main.dir/all] Error 2
make: *** [all] Error 2

Мы ясно видим, что 32-битная версия mach-o передается вфлаг формата вместо ожидаемой 64-битной версии: macho64.

Версии

  • CMake 3.12.2
  • NASM 2.13.03
  • macOS 10.14

1 Ответ

0 голосов
/ 29 сентября 2018

Компилятор проверяется при вызове project().

Вам необходимо переместить настройку переменной CMAKE_ASM_NASM_OBJECT_FORMAT до этого вызова.

...