① gcc 編譯多文件批處理文件
CC= gcc
CFLAGS= -O2 -g -Wall
LIBS= -lsqlite3
LIB_DIR= -L../sqlite3/lib/
INCLUD_DIR= -I../sqlite3/include
test:test.c
$(CC) $^ $(CFLAGS) -o $@ \
$(LIBS) $(INCLUD_DIR) $(LIB_DIR)
.PHONY:clean
clean:
-rm test
1.解釋:編譯器是gcc(可選)
2.CFLAGS= -O2 -g -Wall 是gcc的參數 -O2優化,-g 加調試信息, -Wall(警告)---CFLAGS項可選
3.LIBS= -lsqlite3(庫名)有就寫沒有就不要寫,一般的庫編譯器自己去系統找,特殊的庫要自己加。如:pthread線程庫。
4.LIB_DIR= -L../sqlite3/lib/,指定庫的路徑
5.INCLUD_DIR= -I../sqlite3/include,指定頭文件的路徑.(I是大寫的i)
6.
test:test.c
$(CC) $^ $(CFLAGS) -o $@ \
$(LIBS) $(INCLUD_DIR) $(LIB_DIR)
展開就是:gcc -O2 -g -Wall -o test -L../sqlite3/lib/ -I../sqlite3/include
針對你的問題:
先進你的A文件夾
all:test.o
cc *.o -I../B/include/(寫絕對路徑)
%*.o:%*.c
② 關於gcc編譯器,在控制台寫*.cpp編譯多個cpp會報錯
根據報錯信息,是因為「g++ -c *.cpp」這條指令的通配符串「*.cpp」沒有展開所致。
根據驗證,當執行「g++ -c *.cpp」這條指令時,當前目錄比如testcomb下沒有後綴名為cpp的文件,「*.cpp」就不會展開,就會報錯。
---
如上圖所示,當前目錄下沒有.c文件,報錯與問題中的一致。
③ gcc多文件編譯 三個文件:tree.c tree_fun.c tree.h 我怎麼把他們編譯成一個可執行文件
寫一個Makefile文件,如下:
SOURCE = tree.c tree_fun.c
DEST = main
GCC = gcc
FLAGS =
all:
$(GCC) $(SOURCE) $(FLAGS) -o $(DEST)
這樣就可以直接make,可以編譯這三個文件了,編譯成的可執行文件是main
④ c語言在gcc中兩個文件同時編譯
就是寫一個main函數測試寫的函數功能是否正確。
新建一個文件test.c,內容如下
#include<stdio.h>
void main()
{
char str[]={"I Am A Student!\n"};
char ch='S';
int count=0;
printf("%d\n",count_standard(str, char ch, count));
}
編譯:gcc test.c 2.c
執行:./a.out
⑤ gcc 怎樣編譯幾個c++文件呀
把mingw-make.exe改成make.exe
4 ~5 g( M) z/ F& m1 ^$ R* x) v
& [# ?9 `$ i# S) r9 _$ S你能在command line裡面運行make嗎
& E- y$ p/ E! N# ]) \) M% K' y4 M" h8 m J' P# a5 p
path裡面加安裝路徑/bin了嗎; a& m7 f M( H% C' L+ L
還要加WXWIN環境變數! H. Y/ x6 a1 ^+ G7 C* v( o
" q2 | w, T1 c" S, K; `WXWIN就像java_home一樣. @8 C3 N+ t Z! G; K7 l# V: w6 F
d( O) J. X' y1 J$ e, ~ u2 q- L4 ]環境變數你知道嗎?: n- y7 m! f1 H6 F& h, P
% d$ o5 ?8 U( P( u" L
環境變數是系統的變數,程序運行的時候會存在在環境里可以用來使用,WXWIN就是每當eclipse使用make都會在這個變數下的路徑查找,之類的雲雲
⑥ 請問如何使用gcc編譯多個文件
問題1:gcc a.c main.c -o a.out
問題2:可要可不要,視具體情形而定
問題3:沒有必要
⑦ 用 gcc 如何編譯多個 c 文件
已經cd到ds目錄,用如下命令
gcc -I./a -I./b a.c b.c main.c -o main
⑧ gcc如何編譯多文件
你這里有幾處問題。
fun.h 加頭文件衛士,頭文件中聲明全局變數要用static修飾。
#ifndefFUN_H
#defineFUN_H
staticintg=10;
voidfun();
#endif
其他文件中引用這個文件的變數,extern int g;
mian.c
#include<stdio.h>
#include"fun.h"
externintg;
voidmain()
{
printf("%d ",g++);
fun();
}
⑨ c多個文件如何編譯
關於整個 C 語言中的主函數 main( ) 如何調用相關的頭文件(*.h)、以及調用其它獨立的模塊(*.c)的方法,關鍵在於對於如何編寫 makefile 文件的真正理解、以及真正掌握編寫規則。
由於我已經有很多年沒有編寫過 C 語言源程序、以及編寫 makefile 文件了,但是可以大概給你提供一個思路就是:
下面的文本文件假設以 my_makefile 為例,編譯環境為 Linux 系統,C 語言編譯器為 gcc。
但是在這里注意一點:我的 my_makefile 文件中的注釋語句是否是分號進行注釋,我已經不太記得了,這個需要自己再參考一下。
另外就是:對源文件(*.c)、以及生成可執行文件(my_runfile)在 my_makefile 文件中的前後次序,我也記不清了,僅供參考。
myprog1.o: myprog1.c ; myprog1.o 的生成依賴於 myprog1.c 這個源程序
gcc -c myprog1.c ; 使用 Linux 系統的 C 語言編譯器對 myprog1.c 只編譯、不鏈接
myprog2.o: myprog2.c ; myprog2.o 的生成依賴於 myprog2.c 這個源程序
gcc -c myprog2.c ;使用 Linux 系統的 C 語言編譯器對 myprog2.c 只編譯、不鏈接
my_runfile: myprog1.o myprog2.o ; 可執行文件 my_runfile 的生成依賴於 myprog1.o、myprog2.o 這兩個目標文件
gcc -o my_runfile myprog1.o myprog2.o ; 使用 cc 的 -o 選項生成用戶自定義的可執行文件:my_runfile,如果不指定 -o 選項,cc 編譯器生成的預設可執行文件名為:a.out
運行命令為:
$make -f my_makefile (使用 -f 選項代替預設的 make 文件名 makefile)
⑩ gcc 編譯c的多文件程序問題
不怕麻煩的話呢,可以調整#include結構來讓各c文件相連。。
建議呢,把類型與函數的聲明整理到特定的.h文件中,然後用#ifndef來使其只被包含一次,然後,在用到其它文件中實現的函數的時候將相應的.h文件include進來就好。這樣呢,編譯的時候可以單個文件逐一編譯:
gcc -c main.c -o main.o
gcc -c del.c -o del.o
gcc -c insert.c -o insert.o
參數-c意思是只編譯不連接,-o是名命輸出文件。
全部編譯成.o文件無誤後,再將所有的.o文件相連:
gcc main.o del.o insert.o -o prog
就可以生成prog了。
然後舉個例子說明處理.h文件:
比如這個create.c。裡面定義了一個struct和一個函數。那麼就可以寫create.h如下:
#ifndef __CREATE_H__
#define __CREATE_H__
struct student
{
long num ;
float score;
struct student *next;
};
struct student *creat(void);
#endif
然後呢,因為student這個struct在這個.h文件里已經聲明了,所以create.c里只要寫#include "create.h",而在用到這個struct或者這個函數的場合,也只要這樣簡單一句就可以了。而.h文件開頭的#ifndef可以保證同一個h文件不會被多次包含。當然,如果編譯器支持的話,用#pragma once也許會比#ifndef更省事一些。
以上。