问题 混合C和汇编源并使用cmake构建


我正在使用eclipse构建一个混合汇编代码和C源文件的avr-gcc项目。 我想摆脱eclipse的自动makefile生成,因为我需要将一些进程自动化到makefile中以及其他原因。

我之前使用过cmake,我很满意,所以我想尝试使用它来编译我的源文件。一切都按预期运行C源。问题是,最后我需要编译一些汇编文件(实际上是2)并将它们添加到目标。

我用Google搜索,但我找不到这样做的方法。 有人知道如何做到这一点?

问题是,在日食中我有     -x assembler-with-cpp

添加到gcc参数列表中。我需要找到一种方法,有选择地将此参数添加到标准gcc参数列表中仅用于asm文件。我没有找到任何方式这样做。

先谢谢你

解: 在CMakeLists.txt中设置每个文件以在同一列表中编译

enable_language(C ASM)

set ( SOURCES 
    foo.c
    bar.c
    foobar.s
)

add_executable(program  ${SOURCES} ) 

在工具链文件中,您应该放置:

SET(ASM_OPTIONS "-x assembler-with-cpp")
SET(CMAKE_ASM_FLAGS "${CFLAGS} ${ASM_OPTIONS}" )

第二行就是在编译asm文件时需要传递额外的选项。我想传递所有CFLAGS和一些ASM_OPTIONS


4186
2018-02-28 09:43


起源

您能更准确地描述编译汇编源的问题吗? - Mats Petersson
我编辑了我的帖子。请查看详细信息。我希望他们能够理解这个问题是什么。再次感谢你 - andyinno
我不明白。您不想使用Eclipse生成的makefile,并抱怨Makefile Eclipse写入? - vonbrand
我不想使用自动生成的eclipse的makefile,因为我需要将构建系统放在服务器上的jenkins环境中。自动生成的makefile具有硬编码路径,不适合在jenkins中使用。我发现的替代方法是编写我自己的makefile或使用类似cmake的东西。 cmake完美适用于一切。我只是在编译asm文件时遇到问题。我不是一个cmake大师,我过去用它来做简单的项目。 - andyinno


答案:


CMake 2.8应该支持开箱即用的汇编程序。请务必在项目中启用“ASM”语言。如果汇编源文件需要预处理,还要设置源文件的编译标志:

project(assembler C ASM)
set_source_files_properties(foo.s PROPERTIES COMPILE_FLAGS "-x assembler-with-cpp")
add_executable(hello foo.s bar.c)

13
2018-02-28 15:22



谢谢您的回复。这不起作用...我有编译这个文件的问题: github.com/metormote/hardware/blob/master/basestation_test/src/... 如果我使用你写的文件,avr-as直接调用该文件。我想我需要使用avr-gcc调用该文件让它预处理文件。 - andyinno
查看更新的答案。 - sakra
谢谢sakra的评论。我试过这个:set(ASM_SOURCES xmega / drivers / nvm / nvm_asm.s xmega / drivers / cpu / ccp.s)set_source_files_properties($ {ASM_SOURCES} PROPERTIES COMPILE_FLAGS“$ {CFLAGS} -x assembler-with-cpp”)add_executable( xMegaAnalog $ {SOURCES} $ {ASM_SOURCES})问题是看起来文件不会被编译但只是被跳过。我没有看到他们使用make VERBOSE = 1 - andyinno
请务必使用ASM语言 project(assembler C ASM) 要么 enable_language(C ASM)。 - sakra
这是在CMakeLists.txt之上:项目(XmegaAnalog)项目(汇编程序C ASM)我试图加入像Project(XmegaAnalog汇编程序C ASM)这样的2但没有结果 - andyinno


根据您的解决方案,最简单的解决方案之一是这种单线程:

SET(CMAKE_ASM_FLAGS "${CFLAGS} -x assembler-with-cpp")

2
2018-03-16 01:07