推 Neo1978:用 Makefile,趁這時候練習一下吧.. XD 61.217.231.114 10/18 15:02
推 dozer:Makefile極好用 學了絕不吃虧 140.109.176.19 10/18 15:27
推 ledia:他的問題跟 Makefile 有什麼關係嗎? @@ 140.112.30.56 10/18 15:37
→ ledia:看一下 extern 的用法 140.112.30.56 10/18 15:37
→ dozer:在linux板有回了 140.109.176.19 10/18 15:58
> -------------------------------------------------------------------------- <
發信人: tinlans.bbs@whshs.cs.nccu.edu.tw (汀), 看板: Programming
標 題: Re: [問題] linux下多個檔案如何同時編譯
發信站: 政大狂狷年少 (Wed Oct 18 18:14:29 2006)
轉信站: ptt!ctu-reader!ctu-gate!news.nctu!newsfeed.nthu!news.cs.nthu!WHSHS
※ 引述《tedpola.bbs@ptt.cc (破破茶杯)》之銘言:
> 有兩個程式 main.cc 以及 foo.cc
> main.cc 裡頭宣告了一個全域變數
> #include<iostream>
> using namespace std;
> int x;
> void foo(void);
> int main(void){
> foo(); // 呼叫 foo.cc的那個 function
> cout<<"The value:"<< x << endl;
> return 0;
> }
> foo.cc 裡頭只有一個 function 作遞增的動作
> void foo(void){
> x++;
> }
> 編譯指令如下: # g++ main.cc foo.cc
> 編譯過程有錯誤, x 在 foo裡頭沒有宣告
> 我應該如何修改才能正常編譯並執行呢
> 謝謝!
方法一:
在 foo.cc 放一行 extern int x;
方法二:
新增一個 main.h 裡面擺一行 extern int x;
並讓所有用到 x 的 .cc 檔 #include "main.h"
當然連 main.cc 都可以這麼做,
不過 main.cc 裡原本的 int x; 還是要保留不能拿掉。
編譯方面,
你除了用上面那種方法一次編完之外,
也能分別編譯最後才連結:
g++ -c main.cc
g++ -c foo.cc
g++ main.o foo.o -o 執行檔檔名
因為編譯 C++ 程式所花的時間,
即使是 2006 年的現在還是不太能讓人接受,
所以建議是分開編譯,
不必每改一個檔案就全部通通重編。
--
Name: Tseng, Ling-hua E-mail Address: uranus@it.muds.net
School: National Tsing Hua University Department: Computer Science
Interesting: C++, Compiler, PL/PD, OS, VM, Large-scale software design
Researching: Undecided
Homepage: https://it.muds.net/~uranus
--
╔═══╗ ┼────────────────────────╮
║狂狷 ║ │* Origin:[ 狂 狷 年 少 ] whshs.cs.nccu.edu.tw ╰─╮
║ 年少║ ┼╮ < IP:140.119.164.252 > ╰─╮
╚╦═╦╝ ╰ * From:61-230-216-250.dynamic.hinet.net
─╨─╨─ KGBBS ─ ◎ 遨翔"BBS"的狂狷不馴;屬於年少的輕狂色彩 ◎