You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用CMake编译C与ASM文件的静态库时如何移除NASM不需要的-c参数

解决方案
  • 第一步:修改ASM汇编编译命令模板,移除nasm不支持的-c参数
    在你当前CMakeLists.txt的enable_language(C ASM)语句之后,添加如下配置:
# 覆盖CMake默认的ASM编译规则,去掉nasm不支持的-c参数
set(CMAKE_ASM_COMPILE_OBJECT "<CMAKE_ASM_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT> <SOURCE>")

CMAKE_ASM_COMPILE_OBJECT是CMake生成汇编文件编译命令的模板规则,默认模板中携带了适配gcc等C编译器的-c参数,而nasm不需要该参数,修改模板直接去掉即可。

  • 第二步:修正现有CMakeLists的配置错误
    你当前的配置存在两处问题需要同步修正:
  1. 你使用了${sources_asm}变量但未定义,如果你只有foo.asm一个汇编文件,可以先补充变量定义:
set(sources_asm foo.asm)
  1. 最后一行target_include_directories的收尾符号写错,需要把右大括号改为右小括号:
target_include_directories(myLib PRIVATE ../)

可选优化:如果你编译的是64位程序,可以把汇编编译参数里的-f elf改为-f elf64适配64位目标架构

  • 第三步:重新生成构建系统
    删除旧的build构建目录,重新执行cmake命令生成构建文件,此时编译汇编文件的命令就不会再携带多余的-c参数,报错即可解决。

内容的提问来源于stack exchange,提问作者Mariano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 19:36:05