2012-07-08 157 views
1

我在編譯一個有main.c和很多.c和.h文件的程序。 有什麼辦法來編譯和鏈接沒有通過所有.c文件在海灣合作委員會的命令 像用gcc編譯.c

gcc main.c file.c file2.c -o main 
+3

學習如何編寫'Makefile',你不會後悔的。 – Shahbaz 2012-07-08 21:54:07

回答

6

您的shell可以擴展通配符。所以,你可以:

gcc *.c -o main 

當然,你必須確保你沒有在目錄中的任何額外的*.c文件,你其實不願意編譯。更好的選擇是使用Make或SCons等構建系統。

+0

但是如果有。 c在同一個目錄下,我不希望被包含在內。 – unfamous 2012-07-08 21:53:44

+0

是的,使用構建腳本系統,如Make或SCons。用手做這件事是不可持續的。 – 2012-07-08 21:56:46

+0

我在找的是一個簡單的方法,只是給他包含主(main.c)的文件,他發現其餘 – unfamous 2012-07-08 22:03:47

0
gcc -o main -I. `find . -name "*\.c"` 

這樣,如果你願意,你可以有子文件夾中的.c和.h文件。

但是,這不是一個好的做法。更好的方法是創建一個Makefile

+0

但是,這將包括該目錄中的所有文件。如果我有一個我不想使用的文件,會發生什麼問題 – unfamous 2012-07-08 21:50:59

+0

然後,繼續創建一個Makefile :) – 2012-07-08 22:03:21

3

「使」是構建C應用程序的工具。以下是你好世界版本。

$ 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 

編輯在尊重沙巴茲·評論: 原來的問題正在努力簡化命令行的GCC。程序員的正確方向是瞭解make。由於make有一點點的學習曲線,我想提供一些簡單的墊腳石來做一些有用的事情。通過這種方式開始,您不需要make文件。只需鍵入'make programname',如上所示。使用它的默認規則和關聯的varabiles。 $(CC)-c $(CFLAGS)$(CPPFLAGS)聰明的程序員可以通過設置衆所周知的變量建立在此。

從這裏可以用一個makefile鼓搗。在墊腳石的精神,考慮這個繁瑣的makefile

$ cat makefile 

SRCS = main.c 
OBJ = ${SRCS:.c=.o} 
CC=gcc 

main: ${OBJ} 

$ make 
gcc main.o -o main 

通過設置衆所周知make變量CC來控制使用哪種編譯器。 OBJ是從源文件列表中計算出來的。中產階級的目標是通向規則之路。

不管怎麼說,所以我希望這個職位和其他答案獲得方式有原來的提問。

問候, -JK

+0

hello world版本不應該關注'Makefile'的內容而不是程序? – Shahbaz 2012-07-08 21:54:54

0

前面已經說了,提出的是去 瞭解你需要在每一點上

除了剛纔什麼是最好的方式,它也使用一些標誌,這將幫助是非常重要的你出去而編碼:

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

一個真正好的書介紹如何使用化妝是, http://shop.oreilly.com/product/9780937175903.do