2013-02-28 29 views
10

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

我前几次使用cmake,我很高兴,所以我想尝试使用它编译我的源文件。一切按照预期与C源一起运行。问题是,最后我需要编译一些汇编文件(实际上是2)并将它们添加到目标中。

我搜索了一下,但我没有找到一个方法来做到这一点。 有人有关于如何做到这一点的想法?

的问题是,在月食我 -x汇编程序与-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

+1

你能描述更准确编译汇编源代码时出现了什么问题? – 2013-02-28 10:57:41

+0

我编辑了我的帖子。请看看它的新细节。我希望他们明白什么是问题。再次感谢你 – andyinno 2013-02-28 13:30:11

+0

我不明白。你不想使用Eclipse生成的makefile,并抱怨Eclipse的Makefile文件写入? – vonbrand 2013-02-28 20:14:11

回答

11

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) 
+0

谢谢你的回复。此时此刻不工作......编译此文件时出现问题:https://github.com/metormote/hardware/blob/master/basestation_test/src/asf/xmega/drivers/cpu/ccp.s如果我使用你写的文件,那么直接由avr-as调用。我想我需要使用avr-gcc来调用该文件,以便对文件进行预处理。 – andyinno 2013-02-28 17:23:56

+0

查看更新的答案。 – sakra 2013-02-28 19:10:56

+0

谢谢你的评论。我试过这个:set(ASM_SOURCES \t xmega/drivers/nvm/nvm_asm.s \t xmega/drivers/cpu/ccp。($ {ASM_SOURCES} PROPERTIES COMPILE_FLAGS“$ {CFLAGS} -x assembler-with-cpp”)add_executable(xMegaAnalog $ {SOURCES} $ {ASM_SOURCES})问题是,它看起来像文件不会是编译但只是跳过。我没有看到它们使用make VERBOSE = 1 – andyinno 2013-03-01 08:41:26

2

根据您的解决方案,最简单的解决方案之一是这样的一行代码:

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