Makefile 入門指南

Makefile 入門指南

最簡單的例子

單文件編譯

假設我們有一個main.cpp文件,最簡單的Makefile如下:

# 最簡單的單文件編譯
# 目標:依賴文件
main: main.cpp# 編譯命令g++ main.cpp -o main

使用步驟:

  1. 將上述內容保存為名為Makefile的文件(注意:文件名必須為Makefile,首字母大寫)
  2. 確保main.cpp文件存在于同一目錄下
  3. 打開終端/命令行,導航到該目錄
  4. 運行命令 make (這將自動查找并執行Makefile)
  5. 程序會生成可執行文件 main
  6. 運行程序:
    • Linux/Mac: ./main
    • Windows: main.exe

注意事項:

  • Makefile中的命令必須以Tab開頭,不能使用空格
  • 每次修改源文件后,需要重新運行make命令

添加變量

我們可以添加變量使Makefile更靈活:

# 使用變量的單文件編譯
CC = g++
CFLAGS = -Wallmain: main.cpp$(CC) $(CFLAGS) main.cpp -o main

多文件編譯

當項目有多個源文件時:

# 多文件編譯示例
CC = g++
CFLAGS = -Wallprogram: main.o utils.o$(CC) $(CFLAGS) main.o utils.o -o programmain.o: main.cpp$(CC) $(CFLAGS) -c main.cpputils.o: utils.cpp$(CC) $(CFLAGS) -c utils.cppclean:rm -f *.o program

進階功能

使用模式規則

# 使用模式規則簡化
CC = g++
CFLAGS = -Wallprogram: main.o utils.o$(CC) $(CFLAGS) $^ -o $@%.o: %.cpp$(CC) $(CFLAGS) -c $<clean:rm -f *.o program

自動查找源文件

# 自動查找所有.cpp文件
CC = g++
CFLAGS = -Wall
SRC = $(wildcard *.cpp)
OBJ = $(patsubst %.cpp,%.o,$(SRC))program: $(OBJ)$(CC) $(CFLAGS) $^ -o $@%.o: %.cpp$(CC) $(CFLAGS) -c $<clean:rm -f *.o program

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/76495.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/76495.shtml
英文地址,請注明出處:http://en.pswp.cn/web/76495.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PyTorch數據操作基礎教程:從張量創建到高級運算

本文通過示例代碼全面講解PyTorch中張量的基本操作&#xff0c;包含創建、運算、廣播機制、索引切片等核心功能&#xff0c;并提供完整的代碼和輸出結果。 1. 張量創建與基本屬性 import torch# 創建連續數值張量 x torch.arange(12, dtypetorch.float32) print("原始張…

【Redis】Redis中的常見數據類型(一)

文章目錄 前言一、Redis前置知識1. 全局命令2、數據結構和內部編碼3. 單線程架構 二、String 字符串1. 常見命令2. 計數命令3.其他命令4. 內部編碼5. 典型使用場景 三、Hash哈希1. 命令2.內部編碼3. 使用場景4. 緩存方式對比 結語 前言 Redis 提供了 5 種數據結構&#xff0c;…

Windows 中使用 `netstat` 命令查看端口占用

在 Windows 系統中&#xff0c;可以通過 netstat 命令來查看當前系統的網絡連接以及端口的占用情況。以下是關于該命令的具體說明&#xff1a; #### 使用方法 1. **查看所有端口及其狀態** 可以通過以下命令查看系統中的所有活動連接和監聽端口&#xff1a; bash net…

23種設計模式-結構型模式之裝飾器模式(Java版本)

Java 裝飾器模式&#xff08;Decorator Pattern&#xff09;詳解 &#x1f381; 什么是裝飾器模式&#xff1f; 裝飾器模式是一種結構型設計模式&#xff0c;允許向一個對象動態添加新的功能&#xff0c;而不改變其結構。 &#x1f9f1; 你可以想象成在原有功能上“包裹”一…

解決模擬器打開小紅書設備異常問題

解決模擬器打開小紅書設備異常問題 解決模擬器打開小紅書設備異常問題和無法打開問題 解決模擬器打開小紅書設備異常問題和無法打開問題 問題描述 最近有用戶反饋在模擬器上無法正常登錄和打開小紅書APP&#xff0c;系統提示"設備異常"錯誤。本文將詳細介紹如何通過…

論文閱讀:2025 arxiv AI Alignment: A Comprehensive Survey

總目錄 大模型安全相關研究&#xff1a;https://blog.csdn.net/WhiffeYF/article/details/142132328 AI Alignment: A Comprehensive Survey 人工智能對齊&#xff1a;全面調查 https://arxiv.org/pdf/2310.19852 https://alignmentsurvey.com/ https://www.doubao.com/cha…

精益數據分析(1/126):從《精益數據分析》探尋數據驅動增長之道

精益數據分析&#xff08;1/126&#xff09;&#xff1a;從《精益數據分析》探尋數據驅動增長之道 在當今數字化時代&#xff0c;數據無疑是企業發展的關鍵驅動力&#xff0c;對于競爭激烈的程序化廣告行業更是如此。最近我在研讀《精益數據分析》這本書&#xff0c;收獲頗豐&…

第五節:React Hooks進階篇-如何用useMemo/useCallback優化性能

反模式&#xff1a;濫用導致的內存開銷React 19編譯器自動Memoization原理 React Hooks 性能優化進階&#xff1a;從手動到自動 Memoization &#xff08;基于 React 18 及以下版本&#xff0c;結合 React 19 新特性分析&#xff09; 一、useMemo/useCallback 的正確使用場景…

windows server C# IIS部署

1、添加IIS功能 windows server 2012、windows server 2016、windows server 2019 說明&#xff1a;自帶的是.net 4.5 不需要安裝.net 3.5 盡量使用 windows server 2019、2016高版本&#xff0c;低版本會出現需要打補丁的問題 2、打開IIS 3、打開iis應用池 .net 4.5 4、添…

Elasticsearch的Java客戶端庫QueryBuilders查詢方法大全

matchAllQuery 使用方法&#xff1a;創建一個查詢&#xff0c;匹配所有文檔。 示例&#xff1a;QueryBuilders.matchAllQuery() 注意事項&#xff1a;這種查詢不加任何條件&#xff0c;會返回索引中的所有文檔&#xff0c;可能會影響性能&#xff0c;特別是文檔數量很多時。 ma…

C#進階學習(六)單向鏈表和雙向鏈表,循環鏈表(下)循環鏈表

目錄 &#x1f4ca; 鏈表三劍客&#xff1a;特性全景對比表 一、循環鏈表節點類 二、循環鏈表的整體設計框架 三、循環列表中的重要方法&#xff1a; &#xff08;1&#xff09;頭插法&#xff0c;在頭結點前面插入新的節點 &#xff08;2&#xff09;尾插法實現插入元素…

交換網絡基礎

學習目標 掌握交換機的基本工作原理 掌握交換機的基本配置 交換機的基本工作原理 交換機是局域網&#xff08;LAN&#xff09;中實現數據高效轉發的核心設備&#xff0c;工作在 數據鏈路層&#xff08;OSI 模型第二層&#xff09;&#xff0c;其基本工作原理可概括為 “學習…

科學研究:怎么做

科研&#xff08;科學研究&#xff09;?? 是指通過系統化的方法&#xff0c;探索自然、社會或人文領域的未知問題&#xff0c;以發現新知識、驗證理論或解決實際問題的活動。它的核心是??基于證據的探索與創新??&#xff0c;旨在推動人類認知和技術的進步。 科研的核心要…

算法題(128):費解的開關

審題&#xff1a; 本題需要我們將多組測試用例中拉燈數小于等于6的最小拉燈數輸出&#xff0c;若拉燈數最小值仍大于6&#xff0c;則輸出-1 思路&#xff1a; 方法一&#xff1a;二進制枚舉 首先我們先分析一下基本特性&#xff1a; 1.所有的燈不可能重復拉&#xff1a;若拉的數…

MFC文件-屏幕錄像

下載本文件 本文件將獲取屏幕圖像數據的所有代碼整合到兩個文件中&#xff08;ScreenRecorder.h和ScreenRecorder.cpp&#xff09;&#xff0c;使獲取屏幕圖像數據變得簡單。輸出IYUV視頻流。還可以獲取系統播放的聲音&#xff0c;輸出PCM音頻流。由于使用了MFC類&#xff0c;本…

0801ajax_mock-網絡ajax請求1-react-仿低代碼平臺項目

0 vite配置proxy代理 vite.config.ts代碼如下圖所示&#xff1a; import { defineConfig } from "vite"; import react from "vitejs/plugin-react";// https://vite.dev/config/ export default defineConfig({plugins: [react()],server: {proxy: {&qu…

JVM筆記【一】java和Tomcat類加載機制

JVM筆記一java和Tomcat類加載機制 java和Tomcat類加載機制 Java類加載 * loadClass加載步驟類加載機制類加載器初始化過程雙親委派機制全盤負責委托機制類關系圖自定義類加載器打破雙親委派機制 Tomcat類加載器 * 為了解決以上問題&#xff0c;tomcat是如何實現類加載機制的…

IP編址(來自YESLAB新網工的筆記)

上層協議類型 概念&#xff1a;通常指的是位于網絡層&#xff08;如 IP 層&#xff09;以上的協議類型&#xff0c;這些協議在數據傳輸時需要由網絡層&#xff08;或更低層&#xff09;協議承載。以 IP 協議為例&#xff0c;IP 報文頭部中的 協議字段&#xff08;Protocol Fie…

SpringBoot學習(過濾器Filter。攔截器Interceptor。全局異常捕獲處理器GlobalExceptionHandler)(詳細使用教程)

目錄 一、過濾器Filter。 1.1定義與規范。 1.2工作原理與范圍。 1.3使用場景。 1.4 SpringBoot實現過濾器。&#xff08;Filter配置2種方式&#xff09; <1>注解配置(WebFilter、Order、ServletComponentScan)。 創建過濾器類。 啟用 Servlet 組件掃描。 <2>配置類…

c++題目_P1443 馬的遍歷

P1443 馬的遍歷 # P1443 馬的遍歷 ## 題目描述 有一個 $n \times m$ 的棋盤&#xff0c;在某個點 $(x, y)$ 上有一個馬&#xff0c;要求你計算出馬到達棋盤上任意一個點最少要走幾步。 ## 輸入格式 輸入只有一行四個整數&#xff0c;分別為 $n, m, x, y$。 ## 輸出格式 …