linux編譯c語言,linux編譯參數CPPFLAGS、CFLAGS、LDFLAGS參數的理解

 2023-11-19 阅读 32 评论 0

摘要:參考到下面博客,把編譯步驟分解的很細 linux編譯c語言?linuxC編譯參數CPPFLAGS、CFLAGS、LDFLAGS參數的理解 - yongfengnice - 博客園 CPPFLAGS : 預處理器需要的選項 如:-I (大寫i指定頭文件路徑) CFLAGS:編譯的時候使用的參數 –Wall –g -c LDFLAGS

參考到下面博客,把編譯步驟分解的很細

linux編譯c語言?linuxC編譯參數CPPFLAGS、CFLAGS、LDFLAGS參數的理解 - yongfengnice - 博客園

CPPFLAGS : 預處理器需要的選項 如:-I (大寫i指定頭文件路徑)
CFLAGS:編譯的時候使用的參數 –Wall –g -c
LDFLAGS :鏈接庫使用的選項 –L -l (大寫L指定動態庫的路徑,小寫L指定動態庫的名稱)

vimgrep。

CFLAGS 表示用于C編譯器的選項
CXXFLAGS 表示用于C++編譯器的選項
這兩個變量實際上涵蓋了編譯和匯編的兩個步驟

linux gcc編譯c文件、CFLAGS:指定頭文件(.h)的路徑,如:CFLAGS=-I/usr/include -I/path/include 。

相同地,安裝一個包時會在安裝路徑下建立一個include文件夾,當安裝過程中出現故障時,試著把曾經安裝的包的include文件夾增加到該變量中來。

LDFLAGS:gcc 等編譯器會用到的一些優化參數,也能夠在里面指定庫文件的位置。

linux 編譯。使用方法:LDFLAGS=-L/usr/lib -L/path/to/your/lib。每安裝一個包都差點兒一定的會在安裝文件夾里建立一個lib文件夾。假設明明安裝了某個包,而安裝還有一個包時,它愣是說找不到,能夠抒那個包的lib路徑增加的LDFALGS中試一下。

LIBS:告訴鏈接器要鏈接哪些庫文件。如LIBS = -lpthread -liconv

簡單地說,LDFLAGS是告訴鏈接器從哪里尋找庫文件,而LIBS是告訴鏈接器要鏈接哪些庫文件。

有時候LDFLAGS指定-L盡管能讓鏈接器找到庫進行鏈接。可是運行時鏈接器卻找不到這個庫。假設要讓軟件運行時庫文件的路徑也得到擴展,那么我們須要增加這兩個庫給”-Wl,R”:

假設在運行./configure曾經環境變量設置export LDFLAGS=”-L/var/xxx/lib -L/opt/mysql/lib -Wl,R/var/xxx/lib -Wl,R/opt/mysql/lib” ,注意環境變量設置等號兩邊不能夠有空格,并且要加上引號(shell的使用方法)。那么運行configure以后。Makefile將會設置這個選項。鏈接時會有這個參數,編譯出來的可運行程序的庫文件搜索路徑就得到擴展了。

LDFLAGS = -L/var/xxx/lib -L/opt/mysql/lib -Wl,R/var/xxx/lib -Wl,R/opt/mysql/lib

二、常用

還有一個常用方式? gcc-D的作用

加上-D選項就是在編譯時增加對-D后面的宏的定義,類似下面:

CFLAGS=CFLAGCFLAGS+=-g -Wall -DDEBUG 
1.假如定義一個宏CONFIG_DEBUG在.c里面定義為:#define CONFIG_DEBUG在makefile里定義為: CONFIG_DEBUG=y假如說我們想在makefile里為.c文件進入一個宏定義,就用EXTRA_CFLAGS += DCONFIG_DEBUG( 等價于在.c文件里定義#define CONFIG_DEBUG)這時CONFIG_DEBUG=y與EXTRA_CFLAGS += DCONFIG_DEBUG的區別應該你已經看出來的,前者是對makefile編譯時用的,比如說obj-(CONFIG_DEBUG) += test.o,而后者則是對.c源文件里的 用的,比如說:#if defined(CONFIG_DEBUG) ...#else...#endif2.假如定義一個宏CONFIG_DEBUG = 3在.c里面定義為:#define CONFIG_DEBUG 3假如說我們想在makefile里為.c文件進入一個宏定義,就用EXTRA_CFLAGS += -DCONFIG_DEBUG=3此時兩者的定義完全相同。

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://808629.com/183695.html

发表评论:

猜你喜欢

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 86后生记录生活 Inc. 保留所有权利。

底部版权信息