如何使用CMake将64位macOS应用程序与NASM应用程序一起编译?

时间:2018-09-28 23:05:39

标签: macos assembly cmake nasm mach-o

查看source设置CMAKE_ASM_NASM_OBJECT_FORMAT就足够了,但是事实并非如此。

我希望以下内容可以使用macho64文件格式为macOS应用程序创建有效的构建配置。

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

但是,使用VERBOSE=1

运行make时
/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

我们可以清楚地看到mach-o的32位版本传递给了格式标志,而不是预期的64位版本:macho64

版本

  • CMake 3.12.2
  • NASM 2.13.03
  • macOS 10.14

1 个答案:

答案 0 :(得分:1)

project()调用中检查编译器。

您需要在通话之前 设置CMAKE_ASM_NASM_OBJECT_FORMAT变量。