Loose-Info.com
Last Update 2020/10/29
TOP - 各種テスト - gcc - -pipeオプション

-pipeオプション
コンパイルの各段階の通信に、一時ファイルではなくパイプを使用

テスト概要

その1
-pipeオプションを使用してコンパイル

その2
-pipeオプション無しでコンパイル

実行環境

GCC-8.2.0
GNU C Library 2.28
GNU Binutils 2.31.1


コード例・出力内容中の表記

・実行例中の太字表記部分は、コマンドなどの入力された文字列を示します。
・「」や「...」の着色省略表記は、 実際のソースコードや出力内容などを省略加工した部分を示します。

使用ファイル

各例共通

sample.h
/* -pipe オプション動作確認用ヘッダファイル */ #ifndef SAMPLE_H #define SAMPLE_H #define TEST_FLG 1 struct Samp { int nsamp1; int nsamp2; }; int sampFunc(struct Samp s); #endif /* SAMPLE_H */

sample.c
/* -pipe オプション動作確認用ソースファイル sample.c */ #include "sample.h" int sampFunc(struct Samp s) { return s.nsamp1 + s.nsamp2 + TEST_FLG; }

main.c
/* -pipe オプション動作確認用ソースファイル main.c */ #include "sample.h" #include <stdio.h> int main(void) { struct Samp smp; smp.nsamp1 = 1; smp.nsamp2 = 2; int n = sampFunc(smp); printf("n = %d\n", n); printf("TEST_FLG = %d\n", TEST_FLG); return 0; }

その1

-pipeオプションを使用して実行

コンパイル実行
$ gcc -v -pipe main.c sample.c <--- -pipeオプションを使用してコンパイル Using built-in specs. /usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/cc1 -quiet -v main.c ... -o - | <--- 一時ファイルではなくパイプを使用 as -v --64 -o /tmp/cccoJTEG.o <--- アセンブル(上の行のコンパイルの結果を利用) /usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/cc1 -quiet -v sample.c ... -o - | <--- 一時ファイルではなくパイプを使用 as -v --64 -o /tmp/ccyA1CM0.o <--- アセンブル(上の行のコンパイルの結果を利用) /usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/collect2 ... COLLECT_GCC_OPTIONS='-v' '-pipe' '-mtune=generic' '-march=x86-64' $

その2

-pipeオプション無しで実行

コンパイル実行
$ gcc -v main.c sample.c <--- -pipeオプション無しでコンパイル Using built-in specs. /usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/cc1 -quiet -v main.c ... -o /tmp/ccD0x19Y.s <--- 一時ファイルを使用 as -v --64 -o /tmp/ccgBiyU5.o /tmp/ccD0x19Y.s <--- アセンブル(一時ファイル利用) /usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/cc1 -quiet -v sample.c ... -o /tmp/ccD0x19Y.s <--- 一時ファイルを使用 as -v --64 -o /tmp/ccNAMiJc.o /tmp/ccD0x19Y.s <--- アセンブル(一時ファイル利用) /usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/collect2 ... COLLECT_GCC_OPTIONS='-v' '-mtune=generic' '-march=x86-64' $