導航:首頁 > 源碼編譯 > cpp編譯怎麼要一天

cpp編譯怎麼要一天

發布時間:2023-06-08 20:06:57

❶ 如何用命令編譯cpp文件

單個文件:
g++ file.cpp
這是最簡單形式,預設輸出為a.out,可以用-o命令指定輸出文件,比如g++ file.cpp f.out

多個文件:
g++ -c 1.cpp -o 1.o
g++ -c 2.cpp -o 2.o
g++ 1.o 2.o -o prog.out
鏈接成可執行文件:
一般用g++ -o file file.cpp
多個文件是g++ -o file file1.cpp file2.cpp
編譯C++不是用GCC而是G++.
如果用GCC能編譯但不能鏈接.
多個文件:
1.編譯多個文件,但不連接:
g++ file1.cpp file2.cpp
會生成兩個文件:file1.o, file2.o
2.連接:

g++ -o outFileName file1.o file2.o
會生成一個可執行文件:outFileName。

❷ C++編譯時,是從哪一個cpp開始的,然後各cpp的編譯順序是如何定的

編譯順序由你在編譯設置里決定
其實編譯順序並不重要
最終的連接過程是產生可執行文件的最終步驟,只要保證連接時所有的目標文件都存在就行了

比如一個小程序包括兩個文件
//main.cpp
extern int a;
int main(void){
printf("%d\n",a);
a=5;
printf("%d\n",a);
}
//var.cpp
int a=2;
----
gcc -c main.cpp
gcc -c var.cpp//這兩步可以換過來
gcc main.o var.o//這兩個參數也可以換過來

輸出
2
5

❸ 多個cpp文件如何一起編譯

將函數的聲明放到頭文件,函數的定義放在cpp文件,之後再主函數中,將頭文件包含進來,進行聯編

❹ vs2010如何編譯單個CPP文件。

可以明確的告訴你,無此種編譯器存在,編譯文件不光光是看源文件,各個工程中還有很多的配置文件存在,如果不建立工程,任何編譯器都是無法知道你到底是要編譯控制台程序,windows程序,或者是DLL。所以還不存在。

❺ c++如何編譯啊 ~

linux系統為例:

1、在連網的情況下,在終端中使用root超級用戶許可權輸入以下命令:
sudo apt-get install g++
並回車即可安裝C++編譯器g++。

2、安裝完畢,即可開始新建我們的一個C++工程了。下面以一個hello工程為例,簡單地介紹如何編譯一個 C++工程。

3、登錄Linux系統,打開終端,在當前目錄下使用mkdir命令新建一個hello的目錄;然後使用cd hello進入hello目錄中,並使用vi工具新建hello.h、hello.cpp、main.cpp、makefile四個文件。四個文件的內容分別如下:
1. hello.h文件

#ifndef HELLO_H_
#define HELLO_H_
class Hello {
public:
void print();
};
#endif

2. hello.cpp文件
#include "hello.h"
#include <iostream>
using namespace std;
void Hello::print() {
cout<<"Hello, welcome to Redhat Linux os!"<<endl;
}

3. main.cpp文件
#include "hello.h"
#include <iostream>
using namespace std;
int main() {
Hello h;
h.print();
return 0;
}
注意:這三個文件要以空白行結束,否則編譯時會有警告信息。

4. makefile文件
# this is a makefile of the c++ project hello
# the standard c++ compiler in the Redhat linux is g++
# written by young on June 27th, 2009
TARGET = .
CC = g++
CFLAGS = -g
CFLAGC = -c

MAINC = main.cpp
HELLO = hello.cpp
OBJ = hello.o

INCLUDE = -I$(TARGET)
EXEC = $(TARGET)/main

all: $(EXEC)
$(EXEC): $(OBJ) $(MAINC)
$(CC) $(CFLAGS) $(OBJ) $(MAINC) $(INCLUDE) -o $@
rm -f $(OBJ)
@echo "<<<<<< $@ is created successfully! >>>>>>"
$(OBJ): $(HELLO)
$(CC) $(CFLAGC) $(HELLO) -o $@
clean:
rm -f $(EXEC)
注意: makefile文件中的命令行(紅色字體)一定要以Tab建開頭,否則編譯通不過。

寫好makefile文件後,即可編譯工程。在終端中輸入make命令,回車後將顯示如下信息:
g++ -c hello.cpp -o hello.o
g++ -g hello.o main.cpp -I. -o main
rm -f hello.o
<<<<<< main is created successfully! >>>>>>
這些信息說明工程已被正確編譯,當前目錄下將生成一個main的可執行文件。
同樣,你也可以不使用makefile文件,而直接在終端上輸入以下兩行命令:
g++ -c hello.cpp -o hello.o
g++ -g hello.o main.cpp -I. -o main
也可以編譯這個工程。

使用ls -l命令查看當前目錄下的所有文件,確實有一個main文件。
在終端中輸入./main,即可運行程序。

❻ 如何加快C++代碼的編譯速度

C++代碼一直以其運行時的高性能高調面對世人, 但是說起編譯速度,卻只有低調的份了。比如我現在工作的源代碼,哪怕使用Incredibuild調動近百台機子,一個完整的build也需要四個小時,恐怖!!!雖然平時開發一般不需要在本地做完整的build,但編譯幾個相關的工程就夠你等上好一段時間的了(老外管這個叫monkey around,相當形象)。想想若干年在一台單核2.8GHZ上工作時的場景 - 面前放本書,一點build按鈕,就低頭讀一會書~~~往事不堪回首。
可以想像,如果不加以重視,編譯速度極有可能會成為開發過程中的一個瓶頸。那麼,為什麼C++它就編譯的這么慢呢?
我想最重要的一個原因應該是C++基本的"頭文件-源文件"的編譯模型:
每個源文件作為一個編譯單元,可能會包含上百甚至上千個頭文件,而在每一個編譯單元,這些頭文件都會被從硬碟讀進來一遍,然後被解析一遍。
每個編譯單元都會產生一個obj文件,然後所以這些obj文件會被link到一起,並且這個過程很難並行。
這里,問題在於無數頭文件的重復load與解析,以及密集的磁碟操作。
下面從各個角度給出一些加快編譯速度的做法,主要還是針對上面提出的這個關鍵問題。
一、代碼角度
在頭文件中使用前置聲明,而不是直接包含頭文件。
不要以為你只是多加了一個頭文件,由於頭文件的"被包含"特性,這種效果可能會被無限放大。所以,要盡一切可能使頭文件精簡。很多時候前置申明某個namespace中的類會比較痛苦,而直接include會方便很多,千萬要抵制住這種誘惑;類的成員,函數參數等也盡量用引用,指針,為前置聲明創造條件。

使用Pimpl模式
Pimpl全稱為Private Implementation。傳統的C++的類的介面與實現是混淆在一起的,而Pimpl這種做法使得類的介面與實現得以完全分離。如此,只要類的公共介面保持不變,對類實現的修改始終只需編譯該cpp;同時,該類提供給外界的頭文件也會精簡許多。

高度模塊化
模塊化就是低耦合,就是盡可能的減少相互依賴。這里其實有兩個層面的意思。一是文件與文件之間,一個頭文件的變化,盡量不要引起其他文件的重新編譯;二是工程與工程之間,對一個工程的修改,盡量不要引起太多其他工程的編譯。這就要求頭文件,或者工程的內容一定要單一,不要什麼東西都往裡面塞,從而引起不必要的依賴。這也可以說是內聚性吧。
以頭文件為例,不要把兩個不相關的類,或者沒什麼聯系的宏定義放到一個頭文件里。內容要盡量單一,從而不會使包含他們的文件包含了不需要的內容。記得我們曾經做過這么一個事,把代碼中最"hot"的那些頭文件找出來,然後分成多個獨立的小文件,效果相當可觀。
其實我們去年做過的refactoring,把眾多DLL分離成UI與Core兩個部分,也是有著相同的效果的 - 提高開發效率。
刪除冗餘的頭文件
一些代碼經過上十年的開發與維護,經手的人無數,很有可能出現包含了沒用的頭文件,或重復包含的現象,去掉這些冗餘的include是相當必要的。當然,這主要是針對cpp的,因為對於一個頭文件,其中的某個include是否冗餘很難界定,得看是否在最終的編譯單元中用到了,而這樣又可能出現在一個編譯單元用到了,而在另外一個編譯單元中沒用到的情況。
之前曾寫過一個Perl腳本用來自動去除這些冗餘的頭文件,在某個工程中竟然去掉多達了5000多個的include。

特別注意inline和template
這是C++中兩種比較"先進"的機制,但是它們卻又強制我們在頭文件中包含實現,這對增加頭文件的內容,從而減慢編譯速度有著很大的貢獻。使用之前,權衡一下。
二、綜合技巧
預編譯頭文件(PCH)
把一些常用但不常改動的頭文件放在預編譯頭文件中。這樣,至少在單個工程中你不需要在每個編譯單元里一遍又一遍的load與解析同一個頭文件了。

Unity Build
Unity Build做法很簡單,把所有的cpp包含到一個cpp中(all.cpp) ,然後只編譯all.cpp。這樣我們就只有一個編譯單元,這意味著不需要重復load與解析同一個頭文件了,同時因為只產生一個obj文件,在鏈接的時候也不需要那麼密集的磁碟操作了,估計能有10x的提高,看看這個視頻感受一下其做法與速度吧。

ccache
compiler cache, 通過cache上一次編譯的結果,使rebuild在保持結果相同的情況下,極大的提高速度。我們知道如果是build,系統會對比源代碼與目標代碼的時間來決定是否要重新編譯某個文件,這個方法其實並不完全可靠(比如從svn上拿了上個版本的代碼),而ccache判斷的原則則是文件的內容,相對來講要可靠的多。很可惜的是,Visual Studio現在還不支持這個功能 - 其實完全可以加一個新的命令,比如cache build,介於build與rebuild之間,這樣,rebuild就可以基本不用了。

不要有太多的Additional Include Directories
編譯器定位你include的頭文件,是根據你提供的include directories進行搜索的。可以想像,如果你提供了100個包含目錄,而某個頭文件是在第100個目錄下,定位它的過程是非常痛苦的。組織好你的包含目錄,並盡量保持簡潔。
三、編譯資源
要提高速度,要麼減少任務,要麼加派人手,前面兩個方面講得都是減少任務,而事實上,在提高編譯速度這塊,加派人手還是有著非常重要的作用的。
並行編譯
買個4核的,或者8核的cpu,每次一build,就是8個文件並行著編,那速度,看著都爽。 要是你們老闆不同意,讓他讀讀這篇文章:Hardware is Cheap, Programmers are Expensive

更好的磁碟
我們知道,編譯速度慢很大一部分原因是磁碟操作,那麼除了盡可能的減少磁碟操作,我們還可以做的就是加快磁碟速度。比如上面8個核一塊工作的時候,磁碟極有可能成為最大的瓶頸。買個15000轉的磁碟,或者SSD,或者RAID0的,總之,越快越好。

分布式編譯
一台機子的性能始終是有限的,利用網路中空閑的cpu資源,以及專門用來編譯的build server來幫助你編譯才能從根本上解決我們編譯速度的問題,想想原來要build 1個多小時工程的在2分鍾內就能搞定,你就知道你一定不能沒有它 - Incredibuild。

並行,其實還可以這么做。
這是一個比較極端的情況,如果你用了Incredibuild,對最終的編譯速度還是不滿意,怎麼辦?其實只要跳出思維的框架,編譯速度還是可以有質的飛躍的 - 前提是你有足夠多的機器:
假設你有solution A和solution B,B依賴於A,所以必須在A之後Build B。其中A,B Build各需要1個小時,那麼總共要2個小時。可是B一定要在A之後build嗎?跳出這個思維框架,你就有了下述方案:
這樣,通過讓A的build與B的編譯並行,最後link一下B中的project,整個編譯速度應該能夠控制在1個小時15分鍾之內。
同時開始build A和B 。
A的build成功,這里雖然B的build失敗了,但都只是失敗在最後的link上。
重新link B中的project。

❼ vs2013打開的cpp文件如何編譯

Visual Studio無法對單個源代碼文件直接編譯。

VisualStudio工程(.sln)編譯需要許多的參數,比如頭文件源文件,依賴庫等。如果沒有他們,強大的Studio只是廢物。


解決思路:

建立一個空VisualStudio工程->導入源代碼->編譯運行。


Step1 建立空項目

1.1 打開VisualStudio,按快捷鍵Ctrl + Shift + N,即可彈出新建項目的窗口。

(或,文件(FILE)->新建(NEW)->工程(Project)即可彈出新建項目的窗口。)


❽ linux 怎樣編譯cpp程序例如hello.cpp。等等,很簡單的源程序文件,

說道在liunx下編譯,就不得不說下Makefile了,它有個隱式規則很少人知道
比如你要編譯hello.cpp
你可以通過make hello.cpp
應該沒有比這個更簡單的編譯方法了。

在liunx下調式的話,就需要學習gdb調試方法了,這個網路一下,有很詳細的教程。

最後推薦一下《跟我一起寫 Makefile》這篇文章,看完你應該對linux下編譯C/C++程序有很深的了解了

❾ Linux裡面.cpp文件編譯的問題

不是用make,是用G++,比如,你的文件名是test.cpp,所在的路徑是/home/test/test.cpp
你就在終端里輸入:cd /home/test
然後輸入g++ -o test test.cpp
就已經生成編譯好的文件了。
如果想看運行結果可以在終端輸入
./test
(還是在剛才的路徑下輸入)

閱讀全文

與cpp編譯怎麼要一天相關的資料

熱點內容
怎麼查找雲伺服器上的ftp 瀏覽:154
我的世界伺服器如何注冊賬號 瀏覽:932
統計英文字元python 瀏覽:423
linux信息安全 瀏覽:908
壓縮機接線柱爆 瀏覽:999
程序員自主創業 瀏覽:584
匯編程序員待遇 瀏覽:359
怎麼批量有順序的命名文件夾 瀏覽:211
杭州程序員健身 瀏覽:19
dvd光碟存儲漢子演算法 瀏覽:758
蘋果郵件無法連接伺服器地址 瀏覽:963
phpffmpeg轉碼 瀏覽:672
長沙好玩的解壓項目 瀏覽:145
專屬學情分析報告是什麼app 瀏覽:564
php工程部署 瀏覽:833
android全屏透明 瀏覽:737
阿里雲伺服器已開通怎麼辦 瀏覽:803
光遇為什麼登錄時伺服器已滿 瀏覽:302
PDF分析 瀏覽:486
h3c光纖全工半全工設置命令 瀏覽:143