[問題] 一個makefile的問題

看板C_and_CPP (C/C++)作者 (搖勒)時間13年前 (2012/11/28 23:21), 編輯推噓17(17033)
留言50則, 15人參與, 最新討論串1/1
有兩個原始碼 <elliptical.c> #include <stdio.h> #include "hfcal.h" int main() { display_calories( 115.2, 11.3, 0.79 ); system( "pause" ); return 0; } <hfcal.c> #include <stdio.h> #include "hfcal.h" void display_calories( float a, float b, float c ) { printf( ... ); printf( ... ); printf( ... ); } 然後,我的makefile寫成--> hfcal.o : hfcal.c gcc -c hfcal.c -o hfcal.o elliptical.o : elliptical.c gcc -c elliptical.c -o elliptical.o elliptical : elliptical.o hfcal.o gcc elliptical.o hfcal.o -o elliptical 輸入 make elliptical 命令後顯示 "undefined reference to 'display_calories'" 看了好久,還是不知道原因.... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.250.219.144

11/28 23:26, , 1F
你的make file檔名是elliptical ?
11/28 23:26, 1F

11/28 23:29, , 2F
hfcal.h的內容呢?
11/28 23:29, 2F

11/28 23:36, , 3F
其實action中的輸出檔名可以用 $@ 取代,輸入可以用 $<
11/28 23:36, 3F

11/28 23:37, , 4F
所有輸入(像 linking *.o) 可以用 $^
11/28 23:37, 4F

11/28 23:37, , 5F
這樣 Makefile 會比較乾淨好讀 XD
11/28 23:37, 5F

11/28 23:45, , 6F
檔名是makefile...
11/28 23:45, 6F

11/28 23:45, , 7F
hfcal.h內容為display_calories()的定義
11/28 23:45, 7F

11/28 23:56, , 8F
刪除 *.o 重 build
11/28 23:56, 8F

11/29 00:25, , 9F
不行耶
11/29 00:25, 9F

11/29 00:30, , 10F
我照你的方式重新寫一次 我的環境是並沒有這個問題出現
11/29 00:30, 10F

11/29 00:30, , 11F
會不會是你的hfcal.h有寫錯呢?
11/29 00:30, 11F

11/29 08:04, , 12F
先手動執行 gcc, 看是 gcc 或 makefile 的問題
11/29 08:04, 12F

11/29 08:57, , 13F
我有手動執行過,compile會過。XD
11/29 08:57, 13F

11/29 08:59, , 14F
hfcal.h應該沒有錯,因為我是使用makefile後才出現問
11/29 08:59, 14F

11/29 09:00, , 15F
題的...那還是我的環境有問題,因為我是在windows下使
11/29 09:00, 15F

11/29 09:01, , 16F
用Mingw32,並不是在Unix系統底下...
11/29 09:01, 16F

11/29 10:34, , 17F
我想 ... 你的檔名可能寫成 makefile 而不是 Makefile
11/29 10:34, 17F

11/29 10:35, , 18F
make 沒抓到你的 makefile 所以他直接套內建規則去 build
11/29 10:35, 18F

11/29 10:36, , 19F
你的 elliptical。試試看 make -f [makefile] [target]
11/29 10:36, 19F

11/29 10:43, , 20F
同一個makefile,當我的命令為make hfcal.o則可編譯出
11/29 10:43, 20F

11/29 10:45, , 21F
hfcal的目標檔,這樣的話應該不是沒抓到makefile吧?
11/29 10:45, 21F

11/29 12:17, , 22F
也有可能沒抓到 還是因為有內建規則的關係
11/29 12:17, 22F

11/29 12:18, , 23F
總之要注意如果不想用 -f 指定的話 Makefile 的 M 要大寫
11/29 12:18, 23F

11/29 13:03, , 24F
我用了 make -f makefile elliptical 指令結果顯示...
11/29 13:03, 24F

11/29 13:05, , 25F
"No such file or directory"...和"No rule to make
11/29 13:05, 25F

11/29 13:06, , 26F
target 'makefile'"越來越搞不懂了 = ="
11/29 13:06, 26F

11/29 15:14, , 27F
結果原po的 Makefile 檔名不叫 makefile 也不叫 Makefile?
11/29 15:14, 27F

11/29 16:04, , 28F
檔名是makefile沒錯
11/29 16:04, 28F

11/29 16:56, , 29F
改成 Makefile 呢? 你家的 make 脾氣真古怪 XDD
11/29 16:56, 29F

11/29 17:05, , 30F
也過不了...會顯示找不到Makefile檔
11/29 17:05, 30F

11/29 17:36, , 31F
Gnuwin32有沒有支援Win7 64bit呢??
11/29 17:36, 31F

11/29 17:50, , 32F
我猜你的 makefile 是叫 Makefile.txt XD
11/29 17:50, 32F

11/29 18:07, , 33F
是阿,副檔名是txt沒錯...難道makefile不能是.txt檔
11/29 18:07, 33F

11/29 18:09, , 34F
它不能有任何附檔名
11/29 18:09, 34F

11/29 18:09, , 35F
lph真是一猜必中 XD
11/29 18:09, 35F

11/29 18:09, , 36F
(跟lph揮揮手
11/29 18:09, 36F

11/29 18:44, , 37F
...好想去撞牆
11/29 18:44, 37F

11/29 19:36, , 38F
╯-____-)╯~═╩════╩═~
11/29 19:36, 38F

11/29 19:38, , 39F
因為這真的是一開始用 makefile 的人會出現的常見問題 XD
11/29 19:38, 39F

11/29 19:44, , 40F
太強了... 這樣算隔空抓藥嗎 XD
11/29 19:44, 40F

11/29 20:08, , 41F
這隔空抓藥蠻強的XD
11/29 20:08, 41F

11/29 20:27, , 42F
隔空神抓XD
11/29 20:27, 42F

11/29 22:26, , 43F
身為程式設計師, 請務必把顯示副檔名的選項打開
11/29 22:26, 43F

11/29 23:33, , 44F
XDD
11/29 23:33, 44F

11/30 10:48, , 45F
神醫XDDD
11/30 10:48, 45F

11/30 13:47, , 46F
L大真是神醫....XD
11/30 13:47, 46F

11/30 14:46, , 47F
隔空抓藥XDDDD
11/30 14:46, 47F

11/30 15:15, , 48F
make file不能有副檔名?@@ 我都取名成xxx.mak也沒出錯@@
11/30 15:15, 48F

11/30 18:54, , 49F
我猜樓上是把.mak檔include而已
11/30 18:54, 49F

11/30 18:55, , 50F
要不就是有下-f
11/30 18:55, 50F
文章代碼(AID): #1GjYmJQJ (C_and_CPP)
文章代碼(AID): #1GjYmJQJ (C_and_CPP)