1

main.cと多くの.cおよび.hファイルを含むプログラムをコンパイルしようとしています。gccコマンドですべての.cファイルを渡さずにコンパイルしてリンクする方法はありますか?

gcc  main.c file.c file2.c -o main
4

5 に答える 5

6

シェルはワイルドカードを拡張できます。だからあなたはできる:

gcc *.c -o main

もちろん、*.c実際にコンパイルしたくないディレクトリに余分なファイルがないことを確認する必要があります。より良いオプションは、MakeやSConsなどのビルドシステムを使用することです。

于 2012-07-08T21:50:16.140 に答える
3

「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

于 2012-07-08T21:54:10.067 に答える
0
gcc -o main -I. `find . -name "*\.c"`

このようにして、必要に応じて.cファイルと.hファイルをサブフォルダーに含めることができます。

ただし、これは適切な方法ではありません。より良い方法は、Makefileを作成することです

于 2012-07-08T21:48:31.440 に答える
0

コマンドラインについて質問している場合は、@Man of One Way が提案したように、ワイルドカードを使用してすべての .c ファイルを指定できます。しかし、一般的に、些細なサイズの C アプリケーションは、非常に役立つ「makefile」を使用して構築されます。

http://www.cs.umd.edu/class/fall2002/cmsc214/Tutorial/makefile.htmlなどのチュートリアルを読むことをお勧めします。

于 2012-07-08T21:51:54.263 に答える
0

すでに述べたように、make は最善の方法です。必要なことだけを学ぶことができます。

さらに、コーディング中に役立ついくつかのフラグも使用することが重要です。

-Wall -> sets all warning flags
-g, -ggdb -> generates debug code
-ansi, -std=c99

make の使用方法に関する非常に優れた本は、 http://shop.oreilly.com/product/9780937175903.doです。

于 2012-07-09T15:16:25.160 に答える