1. 程式人生 > >Linux下如何編譯有多個檔案(包括不同目錄下的.c/.h檔案)的C/C++程式

Linux下如何編譯有多個檔案(包括不同目錄下的.c/.h檔案)的C/C++程式

在Linux下要編譯一個C/C++程式,首先要知道包含目錄的作用,對C/C++有了解的就會知道,#include是包含標頭檔案所用的,也就說說部分類、函式、或者變數宣告就在其中。而#include巨集定義又有兩種:

#include""和#include <>

這兩個語句的差別在於查詢檔案的方式,#include""是在當前目錄下查詢,若是找不到再跳到系統目錄,而#include<>則是直接在系統目錄查詢,而不會去當前目錄尋找。(若是在系統中而#include <>找不到則可以通過vi /etc/profile 新增環境變數,找到檔案所在目錄,並且在profile下新增類似如下的語句export PATH = "$PATH: /opt/bin",記住,編輯完之後必須使用source /etc/profile  命令讓你的編輯立馬生效,否則你就要等到重啟之後才能生效了

由於暫時不會寫makefile檔案,所以我們就只好在.c/.cpp檔案的巨集定義中新增標頭檔案,記得要帶上目錄,如

#include "inc/opencv.h" 或是 #include "opencv.h"

#include後面的路徑是相對你.c/.cpp檔案而言的,同時要記住#include ""是不能訪問上一層目錄的,也就是不能使用類似#include "../"的命令。

確定好.c/.cpp/.h/.hpp檔案所在目錄以及#include巨集定義沒有錯誤之後,就可以直接使用命令進行編譯,如

[email protected]#ls
inc  main  Sales_item.cpp
[email protected]
#ls inc/ Sales_item.h [email protected]#cat Sales_item.cpp #include <iostream> #include "inc/Sales_item.h" int main() { Sales_item item1,item2; std::cin>>item1>>item2; std::cout<<item1 + item2 <<std::endl; return 0; } [email protected]#g++ Sales_item.cpp -o my_execute_name
[email protected]
#ls inc main my_execute_name Sales_item.cpp

C++使用g++ youfilename1.c youfilename2.c -o executefilename

C則將g++換成gcc就好,-o是指定輸出檔名,可以新增多個.c/.cpp檔案。

如果你的程式程式碼中沒有#include 巨集定義,則可以使用 g++ file.c -l inc/file.h -o executefilename

-l引數後加的是檔案路徑以及檔名。如果想要對g++、gcc有更多的瞭解,可以使用

[email protected]#man gcc
man gcc 空格換頁,q退出,上下按鍵都能用

相關推薦

Linux如何編譯檔案包括不同目錄的.c/.h檔案C/C++程式

在Linux下要編譯一個C/C++程式,首先要知道包含目錄的作用,對C/C++有了解的就會知道,#include是包含標頭檔案所用的,也就說說部分類、函式、或者變數宣告就在其中。而#include巨集定義又有兩種: #include""和#include <>

Linux 編譯連結原始檔

add.c 的內容 int Add(int a,int b) {   int result;   result=a+b;   return  result;} minus.c 的內容 int Minus(int a,int b){  int result;  result

Gradle 編譯project包括Library庫project依賴指導

pil 出現 基於 viewpage eclips support class 什麽 cor Gradle Android最新自己主動化編譯腳本教程(提供demo源代碼)這篇文章我簡單寫了基於Gradle2.1 進行的android project和android lib

在GET方式參數時的處理

body getname ron 自動 arr tro rest 封裝 from 在一個查詢接口中,需要的參數比較多,如果還是使用GET方式進行請求的話,那麽,Controller 中的方法的參數列表將會非常多,如: public List<String> g

Java:假設車庫3車位可以通過boolean[]陣列來表示車庫可以停車,寫一個程式模擬使用者開車離開,停車入庫的效果。注意:車位車時不能停車。

假設車庫有3個車位(可以通過boolean[]陣列來表示車庫)可以停車,寫一個程式模擬多個使用者開車離開,停車入庫的效果。注意:車位有車時不能停車。 1)使用阻塞佇列來實現(BlockingQueue<T>) Producer類 package com.多執行緒停車問

intellij idea在project同時開啟工程maven工程

前提:我的工程都是maven工程   我有兩個工程,一個是介面contract,一個是介面的具體實現server。想要同時在一個工作空間下展示,方便除錯開發,載入後效果如下   idea有workspace的概念,即工作空間。支援多個工程在一個

web專案Log4j日誌輸出路徑配置問題 問題描述:一個web專案想在一個tomcat執行例項通過修改war包名稱的實現,然後每個例項都將日誌輸出到tomcat的logs目錄例項名命名的文

問題描述:一個web專案想在一個tomcat下執行多個例項(通過修改war包名稱的實現),然後每個例項都將日誌輸出到tomcat的logs目錄下例項名命名的資料夾下進行區分檢視每個例項日誌,要求通過儘可能少的改動配置檔案,最好修改例項名後可以不修改log4j的配置檔案。 實現分析:一般實現上面需求,需要在修

ListView中ItemItem中是edittext或則其他需要焦點的控制元件丟失焦點的問題

ListView中有多個Item,Item中是edittext或則其他需要焦點的控制元件丟失焦點的問題.         發生這個的原因是因為,當點選item中的edittext的時候,軟鍵盤彈出來的時候,如果軟鍵盤會覆蓋到Item佈局,那麼就會造成ListView將會發生

vs同一個工程不要main函式

最近晚上有時間的時候都會用vs除錯下cpp的基礎程式程式碼,練習下基礎語法。有個問題搞的我很納悶,第一次我寫了個測試cpp原始檔,ctrl+F5可以執行,然後按照寫java測試類的思維,在同一個工程下面又建立了個cpp

SQL server 使用 內聯結(INNER JOIN) 聯結以及過濾條件 WHERE, AND使用區別

INNER JOIN ……ON的語法格式: FROM (((表1 INNER JOIN 表2 ON 表1.欄位號=表2.欄位號) INNER JOIN 表3 ON 表1.欄位號=表3.欄位號) INNER JOIN 表4 ON Member.欄位號=表4.欄位號) INNER JOIN 表X ON

C語言】用結構體陣列完成:5學生包括學號,姓名,成績,要求按照成績高低輸出學生資訊.

//用結構體陣列完成:有5個學生(包括學號,姓名,成績),要求按照成績高低輸出學生資訊 #include <stdio.h> struct Stu { int num; char na

android studio如何將module統一放在一個目錄

1.root工程下新建extra資料夾 2.將一個module拖進extra資料夾 3.在setting.gradle中將原有的:moduleName改為:extra:moduleName,同步一下。完成。

將眾多檔案均分到不同目錄小shell指令碼

假設將某個目錄下的所有檔案,轉移拷貝到三個不同的目錄下。可用小指令碼來實現 #!/bin/bash count=0 source_dir='/var/log/' all_files=$(find $source_dir | grep 'web*.log') # 將所有的web.*.lo

Linux編譯不同目錄檔案以及靜態庫、動態庫的使用

轉自:http://blog.csdn.net/luotuo44/article/details/16970841 一、  編譯不同目錄下的多個檔案 各個檔案的佈局如下:         head.h檔案的程式碼:

Linux編譯不同目錄檔案以及靜態庫、動態庫的使用

先看兩篇博文,作為基礎知識。如果對C/C++編譯連結過程都瞭解的話,可以跳過不看。一、  編譯不同目錄下的多個檔案各個檔案的佈局如下:       head.h檔案的程式碼:#ifndef  HEAD_H#define  HEAD_Hint add(int a, int b);  #endif  /*HEAD

linux 核心模組程式設計之編譯原始檔

編譯擁有多個原始檔的核心模組的方式和編譯一個原始檔的方式差不多,我們先來看下我們需要的檔案都有哪些。 首先是main.c檔案 #include <linux/module.h> #include <linux/init.h> MODULE_LICENSE

linux搭建svn添加倉庫項目

con 加權 linu 刪除 密碼 etc none tar cep 1): 創建svn版本庫路徑 mkdir -p /opt/svn/project1 mkdir -p /opt/svn/project2 ...

在當javajar包和檔案時,如何在控制檯編譯執行

編譯 javac -cp .:/root/java/hash2/lib/mysql-connector-java-5.1.35-bin.jar:/root/java/hash2/lib/c3p0-0.9.1.1.jar *.java   執行 java -cp .:

Linux ls -l 各欄位解釋,硬連結軟連線軟硬鏈都可以, 他們沒有什麼主導性, 平等, 保持同步, --刪除操作除外

轉載:https://blog.csdn.net/weixin_37998647/article/details/79217027 如需檢視請移步被轉載文章 以root的家目錄為例:   可以看到,用ls -l命令檢視某一個目錄會得到一個7個欄位的列表。 第1行

Idea一個ProjectModule共存類似於Eclipse一個WorkspaceProject

Eclipse可以在一個工作空間下有多個專案共存,這樣就非常方便的管理多個專案。Idea預設一個專案一個Project,如果管理多個專案的話,需要開啟多個Idea,在多個Idea之間來回切換,這樣非常