2016-07-07 10 views
0

CDTx86_64-w64-mingw32-asのような対応するバックエンドツールを使用して、C/C++ Build > Settings > Tool Settings > GCC Assemblerに設定されているeclipseでデフォルトでアセンブリファイルをコンパイルすることがわかりました。 Options Controlling the Kind of Outputもののアセンブリファイル内のプリプロセッサはgccではありませんか?

################################################################################ 
# Automatically-generated file. Do not edit! 
################################################################################ 

# Each subdirectory must supply rules for building sources it contributes 
src/%.o: ../src/%.c 
    @echo 'Building file: $<' 
    @echo 'Invoking: Cygwin C Compiler' 
    x86_64-w64-mingw32-gcc -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -o "[email protected]" "$<" 
    @echo 'Finished building: $<' 
    @echo ' ' 

src/%.o: ../src/%.cpp 
    @echo 'Building file: $<' 
    @echo 'Invoking: Cygwin C++ Compiler' 
    x86_64-w64-mingw32-g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -o "[email protected]" "$<" 
    @echo 'Finished building: $<' 
    @echo ' ' 

src/%.o: ../src/%.S 
    @echo 'Building file: $<' 
    @echo 'Invoking: GCC Assembler' 
    x86_64-w64-mingw32-as -o "[email protected]" "$<" 
    @echo 'Finished building: $<' 
    @echo ' ' 

はアセンブラコードfile.s

を言います。
file.S file.sx事前処理が必要なアセンブラコード。

私はここにいると思いますpreprocessed cプリプロセッサを参照します。しかし、それはgcc file.Sいうよりas file.S(大文字の「S」)である必要があり、後者は、ファイルがCプリプロセッサが含まれていError: junk at end of line, first unrecognized character is( ' `のようなエラーを促すメッセージが表示されます、次の例(.S)を取る:。

#ifdef __x86_64__ 

#if defined(SYMBOL_UNDERSCORE) 
#define GLOBL_SYMBOL(x) _##x 
#else 
#define GLOBL_SYMBOL(x) x 
/* #error "============" */ 
#endif 

.globl GLOBL_SYMBOL(foo) 

#endif 

動作します(.S)==

はこのように、それは、この考え方によると ?右、プリプロセッサ(GCCの作業手順の1つのステップ)に責任があるのgccで以下の...

/* https://sourceforge.net/p/predef/wiki/Architectures */ 
/* #ifdef __LP64__ || _LP64 */ 
#if defined(__i386__) || defined(_M_IX86) 
# include "nomakefile/foo_x86.S" 
#elif defined(__x86_64__) || defined(_M_X64) || defined(_M_AMD64) 
# include "nomakefile/foo_x64.S" 
#else 
# error Unsupported architecture 
#endif 

Asl O

+0

自己回答Q&Aを作成しようとしていた場合は、質問が多すぎる回答を含まない適切な質問であることを確認してください。他の人からの複数の答えが可能であるべきです。 –

+0

私自身の質問に答えるのは面白いので、試しても試してみることはできません。結果として、 '-1'とマークされています。はい、それは役に立たず、私は間違っていたことを知っています〜 – samm

+0

あなたの答えは間違っているとは関係ありません。要点は、あなたが質問に入れたテキストの多くが答えにあったはずだったということでした。仮説を持つ巨大な質問は、はい/いいえの答えしか持っていません。 "gccは何を実行するかを決定する"のような小さな質問は本当の答えを持つことができます。 –

答えて

3

はい。 gccバイナリは、呼び出すプログラムを決定します。接尾辞がsのファイルを見ると、asが呼び出されます。接尾辞がSのファイルがある場合は、cpp、次にasを呼び出します。アセンブラas自体は接尾辞の規則を知らず、Cプリプロセッサを起動しません。

関連する問題