【问题标题】:CMake uses NASM for linking, which fails.CMake 使用 NASM 进行链接,但失败了。
【发布时间】:2015-03-30 06:23:44
【问题描述】:

我有一个汇编文件,我想一次编译。但是,以下代码失败:

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 已经是一个二进制文件。

我的问题是:如何禁用第一个编译步骤?

【问题讨论】:

  • 不清楚你想做什么,leitimmel。禁用第一次编译?但这就是有效的! -f bin 是一种合法的输出格式,但在包含 CMake 的环境中,它似乎不太可能是您想要的。 (更有可能是-f elf32-f elf64?)
  • 第二步也是如此。问题是它运行命令两次,我想改变它。我认为禁用第一个可能会更好,因为它的结果名称错误(.s.o),但如果这不可能,第二个也可以。输出格式是我正在编写引导加载程序时使用的。

标签: cmake nasm


【解决方案1】:

在 cmake 的 nasm 模块中似乎有一个错误。 Cmake 调用 nasm 进行链接,这显然是错误的(这就是为什么你会看到两个对 nasm 的调用)。修补程序是设置

set(CMAKE_ASM_NASM_LINK_EXECUTABLE "ld <FLAGS> <CMAKE_ASM_NASM_LINK_FLAGS> <LINK_FLAGS> <OBJECTS>  -o <TARGET> <LINK_LIBRARIES>")

【讨论】:

  • 实际上CMake 现在警告Missing variable is: CMAKE_NASM_LINK_EXECUTABLE。如果说构建了 2 个可执行文件,其中一个是 C,另一个是 ASM_NASM CMAKE 不会产生这样的警告。所以这似乎是推荐的方式。
猜你喜欢
  • 2016-12-30
  • 1970-01-01
  • 1970-01-01
  • 2013-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-25
相关资源
最近更新 更多