使用不支持“-o”选项的嵌入式C编译器的CMake

3
我正在使用一个名为HC12的老C编译器编写固件。目前,我使用GNU Make作为构建系统。我希望开始使用CMake,但遇到了一个问题:该编译器不支持一些标准的C编译器语法,即“-o”标志。
我已经制作了一个自定义工具链文件,并添加了所有的C标志,但是CMake似乎会在生成的GNU Makefiles中隐式添加“-o”来编译源文件。
HC12编译器允许我使用-objn =“name_of_file”来指定输出文件名。
我的问题是:有没有办法让CMake停止放置隐式的“-o”,以便我可以使用这个编译器?
我知道有一个针对这个处理器的GCC端口,但在这个时候更改编译器不是一个选项。

4
编写一个脚本,对命令行进行解析,并将-o filename替换为-objn=filename,然后告诉CMake调用该脚本而不是编译器。或者将该脚本命名为编译器的名称,并将其放置在可执行文件搜索路径中(确保使用绝对路径执行编译器)。 - Eric Postpischil
使用Eric建议的解决方法。但是,作为对全世界的服务,请向编译器公司/作者提交错误报告 :-) - Craig Estey
@Dan 是的,我同意。这就是为什么我在我的评论中使用了“:-)”。我只是想“惹恼”那个[古老的]供应商;-)如果我建议OP与他当地的H/W工程师交谈,以重新设计板子以使用更现代/更快的处理器,那我可能会更加“烦人”。我做了很多设备驱动程序/嵌入式工作,我对H/W工程师设计一个性能不足的CPU(例如)的_现代_板感到沮丧。他们设计系统,以便系统在满足其实时延迟/吞吐量要求的情况下以90%的利用率运行。我曾经听到过:_好吧,你有10%的余地_。 - Craig Estey
@CraigEstey -- 抱歉,我没有认真理解。我以为笑脸是指“回报/为下一个人做好事”,我经常用眨眼的表情 ;-)代表讽刺,所以没注意到这点。我同意有关性能不足/过时的CPU的说法。干杯! - Dan
@Lundin - 是的,我确定编译器叫做HC12。这是手册链接:https://www.nxp.com/docs/en/reference-manual/HC12COMPILERRM.pdf 该项目最初使用的是CodeWarrior IDE(不是编译器!),它又使用了HC12编译器。-O标志用于设置主要优化目标(速度 vs 大小)。GCC端口可能已经过时,但我不会感到惊讶,如果它比原来更现代化。该编译器不支持C99标准。 - Bruce Haines
显示剩余7条评论
1个回答

5
你可以参考像 Modules/Compiler/ti.cmake 这样的文件,并为你的 HC12 编译器创建一个相似的文件,然后修改该文件中定义的宏。

# the input file options from TI, change to what your compiler needs
# They are used below in the command where ${lang} is either C, CXX or ASM
set(__COMPILER_HC12C_SOURCE_FLAG_C   "--c_file")
set(__COMPILER_HC12C_SOURCE_FLAG_CXX "--cpp_file")
set(__COMPILER_HC12C_SOURCE_FLAG_ASM "--asm_file")
# add output file option
set(__COMPILER_HC12C_OUTPUT_FLAG_C   "--objn")

macro(__compiler_HC12C lang)

  # ...

  set(CMAKE_${lang}_COMPILE_OBJECT  "<CMAKE_${lang}_COMPILER> --compile_only ${__COMPILER_HC12C_SOURCE_FLAG_${lang}}=<SOURCE> <DEFINES> <INCLUDES> <FLAGS> ${__COMPILER_HC12C_OUTPUT_FLAG_${lang}}=<OBJECT>")
  #                                                                          ---------------------------------------                                       ---------------------------------------

  # ...

endmacro()

希望这能对您有所帮助。


谢谢,这看起来非常有前途。我会在明天尝试它,然后再像Ericpostpischil上面评论的那样将编译器包装在脚本中。当我让它工作时,我会接受你的答案。 - Bruce Haines

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接