Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CMake使用NASM进行链接,但失败了。_Cmake_Nasm - Fatal编程技术网

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不会产生此类警告。因此,这似乎是推荐的方法。