Makefile.am 常用變數說明
本文用於說明編寫AutoTool工具中Makefile.am相關變數的用法
一、概述
Makefile.am是AutoTool編譯時讀取相關編譯引數的配置檔案,檔案區分大小寫,從頂層目錄到子工程生成二進位制檔案的路徑上的目錄都要存在,如果中間目錄不存在該檔案,其下的子目錄不會被編譯。
其中
中間目錄的Makefile.am至少包含
SUBDIRS
最終生成可執行檔案檔案的Makefile.am必須包含
noinst_LIBRARIES 或 bin_PROGRAMS 和 XXX_SOURCES
另外,不同的AutoTool版本可能會有差異。
二、變數說明
1. SUBDIRS
說明下面當前目錄下的哪些子目錄需要編譯,多個目錄用空格分開
如
SUBDIRS=src tests tools
說明需要進入到src、tests 、tools三個目錄中編譯
2. DIST_SUBDIRS
(待確認)
3. noinst_LIBRARIES
表示該工程用於生成庫檔案
如
noinst_LIBRARIES = libcommon.a
表示用於該工程生成庫檔名為libcommon.a
4. XXX_SOURCES
表示要編譯的原始檔,XXX需要用生成的目標檔名替換,如果檔名中含".",則需要改為“_”; 多個原始檔用空格分開,也可以用變量表示檔案
如
libcommon_a_SOURCES = ${common_sources}
表示生成libcommon.a需要編譯的原始檔來源變數common_sources
5. 自定義變數
如
common_sources = common.h common.cpp
表示定義common_sources 為 common.h common.cpp
6. clean-local:
執行make clean命令是,實際執行的命令,其中,命令如下文-rm前面不能是空格,必須是Tab;*表示萬用字元號,多個檔案用空格隔開
如
clean-local:
-rm -f *.gcov *.gcno *.gcda
表示執行make clean清理*.gcov、*.gcno、*.gcda
7. AM_CPPFLAGS 、AM_CFLAGS
預定義變數,,g++編譯器的附加引數
如
AM_CPPFLAGS = -I${top_srcdir}/src
AM_CFLAGS = -I${top_srcdir}/src
-I表示搜尋標頭檔案時的附加路徑
8. LDADD
表示編譯本工程的附加連結庫
如
LDADD = ${top_srcdir}/src/common/libcommon.a
表示編譯時需要連線 ${top_srcdir}/src/common/libcommon.a
9. top_srcdir
預定義變數,工程的頂層目錄
10. bin_PROGRAMS
表示該工程生成可執行檔案
如
bin_PROGRAMS = prog2
prog2_SOURCES = main.cpp
表示生成可執行檔案prog2,其中原始檔為main.cpp
備註:
初學linux程式設計,如發現不正確的地方請不吝指出,感謝。