Makefile & Cmake OSLab 蔡冠宏.

Slides:



Advertisements
Similar presentations
Unix 指令4.
Advertisements

基础模块 模块一 程序设计基础 (一)开发环境部分.
C语言程序设计 主讲教师 :张群燕 电话:
培养目标 1.建立基本的程序设计概念体系,掌握基础程序设计方法。
程序设计基础 贺辉 图书馆三楼办公室(进馆左侧上楼)
健康選擇飲品 營養師 顏妤蓉 2017/3/13.
第三章 仓储技术作业过程.
第1讲 实验环境.
LINUX 环境下程序开发基础 曙光用户培训课程系列 课程时间:1.5小时 更新日期:2008年3月.
基于操作系统的编程复习 张玉宏
程設一.
任务2: 通报的写作.
Linux Further.
題目:十六對一多工器 姓名:李國豪 學號:B
第一章 認識Visual C 環境架構 1-1 認識Visual C Visual Studio 概觀
工具链 介绍部分 1b.
程式語言的基礎 Input Output Program 世代 程式語言 第一世代 Machine language 第二世代
臺北市立大學 資訊科學系(含碩士班) 賴阿福
程式設計概論 1.1 程式設計概論 程式語言的演進 物件導向程式 程式開發流程 1.2 C++開發工具
Linux环境下程序编译 曙光信息产业(北京)有限公司.
物件導向程式設計 CH1, CH2.
Linux基本操作 實習1.
MPLAB IDE 8 建立專案.
张吉豫 GNU编译工具链使用简介 张吉豫
中国散裂中子源小角谱仪 的实验数据格式与处理算法 报告人:张晟恺 中国科学院高能物理研究所 SCE 年8月18日
Installation, advance wireless module and evaluation 2008/11/11
编译与多文件.
1. 檔案File  開新New  檔案Empty File (再另存新檔D:\hello.c)
Linux下的程序编译和运行 曙光信息产业股份有限公司.
SQL Stored Procedure SQL 預存程序.
R教學 安裝RStudio 羅琪老師.
Native Development Kit
编译原理专题实验 2013 西安交通大学.
安裝JDK 安裝Eclipse Eclipse 中文化
永远的 Autotools ——GNU Build System 简介(一)
第九單元 Classes and data abstraction I
2017 Operating Systems 作業系統實習 助教:陳主恩、林欣穎 實驗室:720A.
Android App簡介及 App Inventor 2體驗 靜宜大學資管系 楊子青
重點 資料結構之選定會影響演算法 選擇對的資料結構讓您上天堂 程式.
檔案與磁碟的基本介紹.
第9章 DSP集成开发环境CCS 内容提要 CCS是TI公司推出的用于开发DSP芯片的集成开发环境,它采用Windows风格界面,集编辑、编译、链接、软件仿真、硬件调试以及实时跟踪等功能于一体,极大地方便了DSP芯片的开发与设计,是目前使用最为广泛的DSP开发软件之一。 本章对CCS开发软件的使用作了详细地介绍。首先,对CCS开发软件作了简要地说明,并介绍了该软件的安装及配置;其次,介绍了CCS的基本操作,包括:CCS的窗口和工具条、文件的编辑、反汇编窗口、存储器窗口、寄存器窗口、观察窗口
Gzip 编译及调试 Speaker: Lei Zhao (赵雷) September 13, 2006
Linux核心編譯與模組管理 2013/01/19.
系統元件與結構塑模.
VS.NET 2003 IDE.
东软集团(大连)有限公司 SVVD事业部-于忠华
資料結構 Data Structures Fall 2006, 95學年第一學期 Instructor : 陳宗正.
Linux作業系統 電腦教室Linux使用說明.
TA教育訓練 微處理機系統實習.
106年度 南科智慧製造產業聚落推動計畫 場域型計畫結案報告簡報格式 (簡報時請將此頁刪除).
C语言程序示例: 1.输入10个数,按从小到大的顺序排序。 2.汉诺塔问题。.
Install OpenCV C++ with Visual Studio 2017 on Windows PC
如何使用Gene Ontology 網址:
Class & Object 靜宜大學資工系 蔡奇偉副教授 ©2011.
动态链接库 主讲人:孙鑫
File Input and Output Chap. 11: 施威銘的書 Chap. 7: K&R.
挑戰C++程式語言 ──第7章 輸入與輸出.
基本指令.
2018 Operating Systems 作業系統實習 助教:林欣穎 實驗室:720A.
第1章、系統軟體 作者:陳鍾誠 旗標出版社.
C++程序设计 概述 潘荣江 山东大学软件学院.
编译原理 第一章 引 论 南京大学计算机科学与技术系 戴新宇.
安裝JDK 配置windows win7 環境變數
code::blocks 與GLUT 程式開發
開發Java程式語言的工具 JDK.
嵌入式Linux编程环境.
熟悉VC++开发环境.
Unix指令4-文字編輯與程式撰寫.
Develop and Build Drives by Visual C++ IDE
JUDGE GIRL 使用介紹 & 常見問題 TAs :
Presentation transcript:

Makefile & Cmake OSLab 蔡冠宏

Outline Introduction to compilation flow Makefile Cmake

Introduction to compilation flow C code 編譯器 組譯碼(*.s) 組譯器(as) 目的碼 目的碼(*.o) 連結器(ld) 可執行程式

GCC常用編譯選項 選項 說明 -c 將原始檔案編譯成目的碼(*.o) -S 將原始檔案編譯成組譯碼(*.s) -E 只將原始檔做pre-processor處理(*.i) -o file 指定輸出檔的檔名 -W 指定需要顯示的警告資訊,-Wall表示顯示所有警告資訊

Makefile 透過你所設定的條件幫你編譯好 方便專案管理 會透過檔案比對,依照相依性來編譯,不會全都編浪費時間 可以同時編譯函式庫或是檔案

Make常用參數選項 選項 含義 -f filename 指定make需要用那個makefile檔案 -C dirname 指定make在開始執行後的工作目錄為dirname -k 執行指令出錯時,放棄當前目標,繼續維護其他目標 -n 只印出將會進行的工作,而不會真的去執行 -s 執行但不顯示指令 -r 忽略內部規則 -p 顯示Makefile中所有的變數和內部規則

make指令格式 make [option] [target] Option指的是設定的參數,target指的是要產生出來的目標。 Example: make -n all clean make install make -f makefile2 install

撰寫makefile檔案 makefile是由一堆「目標(target)」和其「相依性檔案(dependency)」還有「法則(rule)」所組成的。 法則在寫的時候前面不可以使用空格,只能使用Tab鍵。 同一法則要換行的話需要使用‘\’字元,加入註解用'#'為開頭字元。

makefile的格式 [target]: [dependency] [dependency] [TAB][rule] [TAB][rule] [target]: [dependency] [TAB][rule]

常用的target慣例 all:表示編譯所有的內容,是make執行時預設的目標。 clean:表示清除目標 distclean:表示清除所有內容 install:表示進行安裝的內容

Example all: myapp myapp: main.o a.o b.o [tab]gcc main.o a.o b.o -o myapp main.o: main.c a.h [tab]gcc -c main.c a.o: a.c a.h [tab]gcc -c a.c b.o: b.c b.h [tab]gcc -c b.c

多重target all: myapp myapp: main.o a.o b.o [tab]gcc main.o a.o b.o -o myapp main.o: main.c a.h [tab]gcc -c main.c a.o: a.c a.h [tab]gcc -c a.c b.o: b.c b.h [tab]gcc -c b.c #install 安裝套件 install: myapp [tab]cp myapp /usr/local/myapp/ #clean 刪除產生出來的目的檔 clean: [tab]rm -f *.o

make的巨集(macro) CC = gcc 指定 $(CC) 叫用 CFLAGS = -ansi -Wall -g 指定 $(CFLAGS) 叫用 SRC = a.c b.c OBJ = $(SRC:.c=.o)

特別的內部巨集 $? 代表需要重建的相依性項目 $@ 目前的目標項目名稱 $< 代表第一個相依性項目 $* 代表第一個相依性項目,不過不含副檔名

Example #compiler CC = gcc #cflags CFLAGS = -Wall -ansi -g #object OBJS = main.o a.o b.o #install path INSTALL_PATH = /usr/local/myapp/ all: myapp myapp: $(OBJS) [tab]$(CC) $(OBJS) -o $@ main.o: main.c a.h [tab]$(CC) $(CFLAGS) -c -o $@ $< a.o: a.c a.h [tab]$(CC) $(CFLAGS) -c -o $@ $< b.o: b.c b.h [tab]$(CC) $(CFLAGS) -c -o $@ $< #install 安裝套件 install: myapp [tab]cp myapp $(INSTALL_PATH) #clean 刪除產生出來的目的檔 clean: [tab]rm -f *.o

萬用字元的語法 #compiler CC = gcc #cflags CFLAGS = -Wall #object OBJS = main.o a.o b.o #include path INCLUDE_PATH = include all: myapp myapp: $(OBJS) [tab]$(CC) $(OBJS) -o $@ %.o: %.c [tab]$(CC) -I$(INCLUDE_PATH) $(CFLAGS) -c -o $@ $<

Cmake 跨平台的自動化建構系統。 利用組態檔(CmakeLists.txt)產生標準的建構檔。 cmake CmakeList.txt Native Build System CmakeList.txt Ntive Build Tools Executables Libraries

Source/Binary Tree Source tree Binary tree/Build tree Cmake輸入檔 原始程式碼 平台相依的建構輸出 Makefile, GNUmakefile, .dsp, .xcodebuild 執行檔、函式庫 *.exe, *.so, *.dll, *.lib

Hello Cmake Example Hello src Include demo.c hello.c CMakeLists.txt hello.h

CMakeLists.txt In hello CMAKE_MINIMUM_REQUIRED(VERSION 2.6) #project name PROJECT(HELLO) #source code subdirectories SUBDIRS(src) #Location of library include files INCLUDE_DIRECTORIES(${HELLO_SOURCE_DIR}/include)

CMakeLists.txt In src directory INCLUDE_DIRECTORYS(${HELLO_SOURCE_DIR}/include ${HELLO_SOURCE_DIR}/src) ADD_EXECUTABLE(hello demo.c hello.c)

Build Project Step1:Create a directory to build Ex:mkdir hello_build Step2:Enter this directory and type: cmake ../hello Step3:Now…the configuration is generated,type make to make Makefile make The output binary is in src directory

Question What’s the format of writing Makefile? What do $?,$<, $@, $* mean in Makefile? How to use CMakeLists.txt in cmake? What’s the feature about cmake?

Homework Use linked list data structure and required API to implement stack operation. The function’s definition and declration must be separated form src and include directory. Write Makefile and CMakeLists.txt to compile them respectively. Write your thoughts about make and cmake.