CMake使用NASM进行链接,但失败了。
我想在一次运行中编译一个汇编程序文件。但是,以下代码失败:CMake使用NASM进行链接,但失败了。,cmake,nasm,Cmake,Nasm,我想在一次运行中编译一个汇编程序文件。但是,以下代码失败: enable_language(ASM_NASM) set(CMAKE_ASM_NASM_FLAGS "${CMAKE_ASM_NASM_FLAGS} -f bin") add_executable(test test.s) CMake首次运行:nasm-f bin-o test.s.o test.s 然后:nasm-f bin-o test test.s.o 最后一步失败,因为test.s.o已经是一个二进制文件 我的问题是:如何禁
enable_language(ASM_NASM)
set(CMAKE_ASM_NASM_FLAGS "${CMAKE_ASM_NASM_FLAGS} -f bin")
add_executable(test test.s)
CMake首次运行:nasm-f bin-o test.s.o test.s
然后:
nasm-f bin-o test test.s.o
最后一步失败,因为test.s.o已经是一个二进制文件
我的问题是:如何禁用第一个编译步骤?cmake的nasm模块中似乎有一个bug。Cmake调用nasm进行链接,这显然是错误的(这就是为什么您会看到两个对nasm的调用)。热修复程序即将设置
set(CMAKE_ASM_NASM_LINK_EXECUTABLE "ld <FLAGS> <CMAKE_ASM_NASM_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>")
set(CMAKE\u ASM\u NASM\u LINK\u可执行文件“ld-o”)
不清楚你想做什么,莱蒂梅尔。禁用第一次编译?但这才是有效的-f bin
是一种合法的输出格式,但在包含CMake的环境中,它似乎不太可能是您想要的格式。(更可能是-f elf32
或-f elf64
?)第二步也会这样做。问题是它运行了两次该命令,我想对此进行更改。我认为禁用第一个可能更好,因为它的结果有错误的名称(.s.o
),但如果不可能,第二个也可以。输出格式是在我编写引导加载程序时使用的。实际上,CMake
现在警告说,缺少的变量是:CMake\u NASM\u LINK\u EXECUTABLE
。假设生成了两个可执行文件,其中一个是C
,另一个是ASM\u NASM
CMAKE不会产生此类警告。因此,这似乎是推荐的方法。