1. 程式人生 > >Makefile中自定義巨集進行條件編譯

Makefile中自定義巨集進行條件編譯

c c++源程式生成可執行檔案的過程一般經過編譯和連結的過程。編譯就是把源程式編譯生成中間檔案,也就是.obj(Win)。這個過程中檢查語法是否正確,函式和變數是否正確宣告(對於後者,要制定路徑正確的標頭檔案)。所以如果函式只在標頭檔案中正確宣告而不在原始檔中實現的話是可以通過編譯的。當然如果不對函式進行實現,連結過程中會出現錯誤。

編譯的過程中我們可以通過新增編譯開關控制我們的程式碼編譯過程。

以下是例子程式

int main(void)

{

#ifdef DEBUG

printf("debug");

#endif

}

Makefile檔案

CC = gcc

TARGETS = main

SRCS = main.c

OBJS = main.o

COMFLAGS = -DDEBUG

.PHONY:clean

$(TARGETS):$(OBJS)

$(CC)  $^ -o [email protected]

%.o:%.c

$(CC)  $(COMFLAGS ) -c $^ -o [email protected]   #新增編譯開關一定要在這個過程中,如果把編譯開關放在上邊的過程是沒用的

clean:

rm -f $(TARGETS) $(OBJS)

相關推薦

Makefile定義巨集進行條件編譯

c c++源程式生成可執行檔案的過程一般經過編譯和連結的過程。編譯就是把源程式編譯生成中間檔案,也就是.obj(Win)。這個過程中檢查語法是否正確,函式和變數是否正確宣告(對於後者,要制定路徑正確的標頭檔案)。所以如果函式只在標頭檔案中正確宣告而不在原始檔中實現的話是可以

Makefile中用巨集定義進行條件編譯(gcc -D)/在Makefile進行巨集定義-D

在原始碼裡面如果這樣是定義的: #ifdef   MACRONAME //可選程式碼 #endif 那在makefile裡面 gcc   -D   MACRONAME=MACRODEF 或者 gcc   -D   MACRONAME  這樣就定義了預處理巨集,編譯的時候可選程式碼就會被編譯進去了。 對於G

sklearn定義轉換器以及使用流水線對資料據進行處理

儘管 Scikit-Learn 提供了許多有用的轉換器,你還是需要自己動手寫轉換器執行任務,比如自定義的清理操作,或屬性組合。你需要讓自制的轉換器與 Scikit-Learn 元件(比如流水線)無縫銜接工作,因為 Scikit-Learn 是依賴鴨子型別的(而不是繼承),你所

編譯預處理指令:檔案包含指令、巨集定義指令、條件編譯指令

編譯預處理指令:檔案包含指令、巨集定義指令、條件編譯指令。“#”開頭,不加分號“;” 1、檔案包含指令:  #include<檔名> 標準目錄下搜尋  #include"檔名" 當前目錄下搜尋,再在標準目錄下搜尋 2、巨集定義指令:  #define 巨集名 巨集文字 //巨集名習慣大寫  #

visual studio 配置屬性增加定義巨集巨集

visual studio中配置自己的巨集。 下面是vs中的巨集,SolutionDir這個是工程所在目錄資料夾。如何建立自己的巨集呢 檢視->其他視窗->屬性管理器,跳轉到屬性管理器介面。然後選擇一個工程,右鍵出現下圖所示 點選新增新專案屬性表,給屬性表命名一個

qt *.pro 和原始碼通用巨集定義(如條件編譯

*.pro中: DEFINES += _qt_msvc_2015 contains(DEFINES,_qt_msvc_2015){ QT += webengine QT

GCC/G++編譯器和VS IDE的一些預定義巨集和使用者定義巨集

預定義巨集,  編譯器通常會根據平臺和編譯選項的不同,為被編譯的程式提供不同的預定義的巨集, 例如WIN32 WIN64 LINUX, 例如DEBUG, RELEASE. 1. 在使用gcc/g++編譯器時,可以通過以下命令打印出編譯器預編譯的巨集。 gcc -dM -E - < /dev/null

javaCollections對定義物件進行sort()

基礎學生類 package itcast02; public class Student implements Comparable<Student> { // 學生姓名

QT定義類,類定義的結構體,但是編譯報錯說這個結構體未宣告

.h檔案中自定義類及其相關變數、結構體及函式,.cpp中實現相關操作。 <在.cpp中此定義,編譯成功> inttFeaturel(unsignedchar* bD, face::DETECT_INFO*faceInfo, unsignedchar*fea

淺析在QtWidget定義Model(beginInsertRows()和endInsertRows()是空架子,類似於一種信號,用來通知底層)

cti ron 初學者 開發 http 沒有 insert ati 學習 Qt 4推出了一組新的item view類,它們使用model/view結構來管理數據與表示層的關系。這種結構帶來的功能上的分離給了開發人員更大的彈性來定制數據項的表示,它也提供一個標準的model接

Python編程定義Lambda函數的使用場景

list str pre net 代碼 接收 n) app image Python 中定義函數有兩種方法,一種是用常規方式 def 定義,函數要指定名字,第二種是用 lambda 定義,不需要指定名字,稱為 Lambda 函數。 Lambda 函數又稱匿名函數,匿名函數

Laravel5.4定義404等錯誤頁面

dtd app top exc auto get 1.0 存在 href 1.在resources/views/下簡歷文件夾error,在error文件中建立"404.blade.php文件"。    1 <!DOCTYPE html PUBLIC "-//W3C

c#(winform)定義ListItem類方便ComboBox添加Item項

urn left over string his 定義 return box item 1.定義ListItem類 public class ListItem { private string _key = string.Empty;

javaScript定義sort的比較函數,用於比較字符串長度,數值大小

var cti lin family 字符串長度 tr1 個數 new fun var arr = [‘aa‘, 23, 1.2, ‘bb‘, ‘cc‘]; var len = arr.length; // for (var i = 0; i < len; i++)

ZBrush 4R7定義筆刷

信息 com 如果 功能 軟件版本 簡單 分享 按鈕 使用 為了便於雕刻,ZBrush?很人性化地設計了自定義筆刷。隨著ZBrush軟件版本不斷更新,功能也在不斷完善。只是在筆刷面板ZBrush軟件就為用戶提供了上百種之多,如果我們想要用某種筆刷,一個個找起來是不是很麻煩,

1 .net定義事件的步驟

sender soc size etc utf nbsp 並且 ram void 1 申明一個自定義的類並且繼承事件的基類 public class ClientSocketModelConnectedEvent:EventArgs { priv

jqGrid細節備註—jqGrid定義格式,URL格式

cto cti 函數名 pan sortable mod 51cto show 對象 本文來自:http://cnn237111.blog.51cto.com/2359144/782137 jqGrid中自定義格式,URL格式 當官方自帶的showlink用起來不是十分

gecode定義brancher

size 方式 val mit share pro clu assign rtu 實際應用中,往往要比官方的示例復雜很多,這裏對變量的選擇等往往需要以自定義的方式進行選擇,這個時候就需要自定義brancher,相關註釋在代碼中 #include <gecode/in

Django定義過濾器的使用

sof html views charset 展示 set etag 很多 back 我在這裏做的是: 從數據庫查出id遞增的一些信息,展示在前臺。 編寫一個過濾器判斷查出數據的id是偶數的返回True 奇數返回False 1 創建項目,創建應用,註冊應用,配置

6.1 如何在spring定義xml標簽

關聯 tex and 啟動流程 調用 mls ram 如果 .com dubbo自定義了很多xml標簽,例如<dubbo:application>,那麽這些自定義標簽是怎麽與spring結合起來的呢?我們先看一個簡單的例子。 一 編寫模型類 1 packa