main.cと多くの.cおよび.hファイルを含むプログラムをコンパイルしようとしています。gccコマンドですべての.cファイルを渡さずにコンパイルしてリンクする方法はありますか?
gcc main.c file.c file2.c -o main
シェルはワイルドカードを拡張できます。だからあなたはできる:
gcc *.c -o main
もちろん、*.c
実際にコンパイルしたくないディレクトリに余分なファイルがないことを確認する必要があります。より良いオプションは、MakeやSConsなどのビルドシステムを使用することです。
「make」は C アプリをビルドするためのツールです。以下は、Hello World バージョンです。
$ cat main.c
#include <stdio.h>
int main (char *argv[], int argc) {
printf("Hello World\n");
return 0;
}
$ make main
cc main.c -o main
$ ./main
Hello World
Shahbaz のコメントを尊重して編集: 元の質問は、gcc のコマンドラインを簡素化しようとしていました。プログラマーにとって正しい方向は、make について学ぶことです。make には多少の学習曲線があるため、何か役立つことを行う簡単な足がかりを提供したいと考えました。この方法で開始すると、make ファイルは必要ありません。上記のように「make programname」と入力するだけです。Make はデフォルトの規則と関連する変数を使用します。$(CC) -c $(CFLAGS) $(CPPFLAGS) 頭の切れるプログラマーは、よく知っている変数を設定することで、これに基づいて構築できます。
ここから、makefile をいじることができます。飛び石の精神で、この些細なメイクファイルを検討してください
$ cat makefile
SRCS = main.c
OBJ = ${SRCS:.c=.o}
CC=gcc
main: ${OBJ}
$ make
gcc main.o -o main
既知の make 変数 CC を設定して、どのコンパイラを使用するかを制御します。OBJ は、ソース ファイルのリストから計算されます。ささいな目標は、ルールへの道を歩み始めます。
とにかく、この投稿と他の回答が元の質問者をそこに導くことを願っています。
よろしく、-jk
gcc -o main -I. `find . -name "*\.c"`
このようにして、必要に応じて.cファイルと.hファイルをサブフォルダーに含めることができます。
ただし、これは適切な方法ではありません。より良い方法は、Makefileを作成することです
コマンドラインについて質問している場合は、@Man of One Way が提案したように、ワイルドカードを使用してすべての .c ファイルを指定できます。しかし、一般的に、些細なサイズの C アプリケーションは、非常に役立つ「makefile」を使用して構築されます。
http://www.cs.umd.edu/class/fall2002/cmsc214/Tutorial/makefile.htmlなどのチュートリアルを読むことをお勧めします。
すでに述べたように、make は最善の方法です。必要なことだけを学ぶことができます。
さらに、コーディング中に役立ついくつかのフラグも使用することが重要です。
-Wall -> sets all warning flags
-g, -ggdb -> generates debug code
-ansi, -std=c99
make の使用方法に関する非常に優れた本は、 http://shop.oreilly.com/product/9780937175903.doです。