web-dev-qa-db-ja.com

Cとアセンブリのソースを混合してcmakeでビルドする

私はEclipseを使用して、アセンブリコードとCソースファイルを混在させるavr-gccプロジェクトを構築しています。いくつかのプロセスをmakefileに自動化する必要があるなどの理由で、Eclipseの自動makefile生成を取り除きたいと思います。

以前にcmakeを使用していて、満足しているので、それを使用してソースファイルをコンパイルしたいと思います。すべてはCソースで期待どおりに実行されます。問題は、最後にいくつかのアセンブリファイル(実際には2つ)をコンパイルし、それらをターゲットに追加する必要があることです。

私はググったが、これを行う方法が見つからなかった。誰かがこれを行う方法についてのアイデアを持っていますか?

問題は、Eclipseに-x assemblyr-with-cppがあることです。

gcc引数リストに追加されました。 asmファイルに対してのみ、このパラメーターを標準のgcc引数リストに選択的に追加する方法を見つける必要があります。私はこれを行う方法を見つけることができませんでした。

前もって感謝します

解決策:CMakeLists.txtですべてのファイルを同じリストでコンパイルするように設定します

enable_language(C ASM)

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

add_executable(program  ${SOURCES} ) 

toolchainファイルに配置する必要があります。

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

2行目は、asmファイルのコンパイル中に追加のオプションを渡す必要がある場合のみです。すべてのCFLAGSといくつかのASM_OPTIONSを渡したかった

19
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)
17
sakra

あなたのソリューションに基づくと、最も簡単なソリューションの1つはこの1行です:

SET(CMAKE_ASM_FLAGS "${CFLAGS} -x assembler-with-cpp")
3
Uli Köhler