Last Update 2024/05/05
@ファイル
ファイルからコマンドラインオプションを読み込み
「@ファイル」オプションの位置に挿入
テスト概要
オプションファイルを指定して実行
オプションファイルに含まれる特殊文字に関する挙動確認
実行環境(その1)
GCC-8.2.0
GNU C Library 2.28
GNU Binutils 2.31.1
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
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
@ファイル オプションファイルを指定して実行
$ 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 オプション動作確認用ソースファイル
$
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 オプション動作確認用ソースファイル
オプションファイル内の
シングルクォートとダブルクォートによる囲みと、
行頭空白文字、バックスラッシュ、改行文字は、
オプション文字列から除去される