Loose-Info.com
Last Update 2024/05/05
TOP - 各種テスト - gcc - @ オプション

@ファイル
ファイルからコマンドラインオプションを読み込み 「@ファイル」オプションの位置に挿入

テスト概要

その1
オプションファイルを指定して実行

その2
オプションファイルに含まれる特殊文字に関する挙動確認

実行環境(その1)

GCC-8.2.0
GNU C Library 2.28
GNU Binutils 2.31.1

実行環境(その2)

GNU bash, version 5.1.16
GCC-12.2.0
GNU C Library 2.36
GNU Binutils 2.39


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

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

使用ファイル


sample.c
/* @file オプション動作確認用ソースファイル */ #include <stdio.h> int main(void) { printf("@file オプション動作確認用ソースファイル\n"); return 0; }

sample.opt
-v -o sample_optfile

その1


@ファイル オプションファイルを指定して実行
$ ls -l total 8 -rw-r--r-- 1 ****** ******** 196 *** ** **:** sample.c -rw-r--r-- 1 ****** ******** 22 *** ** **:** sample.opt $ gcc @sample.opt sample.c <--- オプションファイルとしてsample.optを指定 Using built-in specs. 以下、ファイル内で指定された-vオプションによる出力 COLLECT_GCC=gcc /usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/cc1 -quiet -v sample.c ... -o /tmp/ccgON7um.s as -v --64 -o /tmp/ccegg8gr.o /tmp/ccgON7um.s /usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/collect2 ... -o sample_optfile ... ^^^^^^^^^^^^^^^^^ 出力ファイル名の指定 COLLECT_GCC_OPTIONS='-v' '-o' 'sample_optfile' '-mtune=generic' '-march=x86-64' $ ./sample_optfile <--- 生成された実行ファイルを確認 @file オプション動作確認用ソースファイル $

その2


sample1.opt
-v -Wall -Wextra -o cmd0

sample2.opt
-x c -std=c90

sample3.opt
sample.c

特殊文字を含まないオプションファイルで実行
$ gcc @sample1.opt @sample2.opt @sample3.opt Using built-in specs. COLLECT_GCC_OPTIONS='-v' '-Wall' '-Wextra' '-o' 'cmd0' '-std=c90' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmd0-' /usr/libexec/gcc/x86_64-pc-linux-gnu/12.2.0/cc1 -quiet -v sample.c ... COLLECT_GCC_OPTIONS='-v' '-Wall' '-Wextra' '-o' 'cmd0' '-std=c90' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmd0-' as -v --64 -o /tmp/ccyELvBQ.o /tmp/ccJOeQuj.s COLLECT_GCC_OPTIONS='-v' '-Wall' '-Wextra' '-o' 'cmd0' '-std=c90' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmd0.' /usr/libexec/gcc/x86_64-pc-linux-gnu/12.2.0/collect2 -plugin ... COLLECT_GCC_OPTIONS='-v' '-Wall' '-Wextra' '-o' 'cmd0' '-std=c90' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmd0.' $ ./cmd0 @file オプション動作確認用ソースファイル

sample1.optを下記の内容に変更
シングルクォート、ダブルクォート、行頭空白文字、バックスラッシュの記述を追加
'-v' "-Wall" -Wextra \-o cmd0

sample2.optを下記の内容に変更
改行を追加
-x c -std=c90

特殊文字を含むオプションファイルで実行
$ gcc @sample1.opt @sample2.opt @sample3.opt Using built-in specs. COLLECT_GCC_OPTIONS='-v' '-Wall' '-Wextra' '-o' 'cmd0' '-std=c90' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmd0-' /usr/libexec/gcc/x86_64-pc-linux-gnu/12.2.0/cc1 -quiet -v sample.c ... COLLECT_GCC_OPTIONS='-v' '-Wall' '-Wextra' '-o' 'cmd0' '-std=c90' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmd0-' as -v --64 -o /tmp/cci3eOjM.o /tmp/ccLx6yvl.s COLLECT_GCC_OPTIONS='-v' '-Wall' '-Wextra' '-o' 'cmd0' '-std=c90' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmd0.' /usr/libexec/gcc/x86_64-pc-linux-gnu/12.2.0/collect2 -plugin ... COLLECT_GCC_OPTIONS='-v' '-Wall' '-Wextra' '-o' 'cmd0' '-std=c90' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmd0.' $ ./cmd0 @file オプション動作確認用ソースファイル オプションファイル内の シングルクォートとダブルクォートによる囲みと、 行頭空白文字、バックスラッシュ、改行文字は、 オプション文字列から除去される