在linux環境下編程,標配的編譯器是gcc,g++,以及構建工具make,cmake。linux中和開發環境密切相關的有/usr/bin(命令程序), /usr/include(源碼),/usr/lib(編譯的庫),這些其實和c/c++的編程很密切。
gcc -o NameMain name.c main.c // 典型的gcc使用方法
我們嘗試使用在linux環境,使用make工具編譯git源碼。編譯過程中提示找不到curl.h/curl.c文件,這個就是說該目錄下沒有,/usr/include目錄也沒有,那么就需要手動去下載。解決了這個依賴,還有其他依賴,手動安裝git確實很麻煩,應為還要安裝很多的依賴庫,所以最好還是使用二進制安裝包,比如mysql。
回顧我們開發c/c++程序的過程,一般從源碼.cpp到可執行的機器碼,需要源碼文件,一般也會引用別人的庫文件,make就是處理文件間的依賴關系的shell命令,其依賴和構建規則使用Makefile說明,這里推薦阮一峰老師的make教程。下面老說說makefile文件的編寫:
<target> : <prerequisites> [tab] <commands>
這就是makefile的構成單元,非常簡單明了,其中,commands就可以使用g++命令了。這樣我們可以直接執行makefile文件,而不是逐個編譯,鏈接,大大提高了工作效率。make install其實是一個約定的target,用於向計算機中寫入庫文件。make -D CMAKE_INSTALL_PREFIX=/usr/local,用於指定安裝路徑,cmake默認會安裝在,usr/local中。
可以看到,如果程序規模很大,編寫Makefile也工作量也會很大,並且其修改也會很麻煩,於是cmake工具來啦,簡單一句話就是生成Makefile的工具,其核心是CMakeLists.txt,這是一個典型的CMakeLists.txt的寫法,它其中體現了很多特殊的命令,比如cmake_minimum_required要求對於cmake版本的支持,project命令說明了其工程的名字。if,else,set等命令的支持等。
#一般都以這一行開始 cmake_minimum_required (VERSION 2.6) #項目名 project (TEST) #選擇編譯器,LINUX上選擇g++,MAC OS上選擇clang++ if (APPLE) set (CMAKE_CXX_COMPILER clang++) elseif (UNIX) set (CMAKE_CXX_COMPILER g++) endif() #設置編譯器選項支持c++11 set (CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -std=c++11) #查找boost庫 find_library (BOOST_SYSTEM NAMES boost_system PATHS /usr/lib /usr/local/lib ) find_library (BOOST_THREAD NAMES boost_thread PATHS /usr/lib /usr/local/lib ) #設置數學庫的目標名,該變量在子目錄也是可見的 set (MATH_LIB "my_math") #添加頭文件搜索路徑 include_directories (./math) #添加子目錄,這樣math目錄才會被編譯 add_subdirectory (math) #添加可執行目標文件Test add_executable (Test main.cpp) #LIBS變量存儲所有需要鏈接的庫 set (LIBS ${MATH_LIB}) if (BOOST_SYSTEM) set (LIBS ${LIBS} ${BOOST_SYSTEM}) endif() if (BOOST_THREAD) set (LIBS ${LIBS} ${BOOST_THREAD}) endif() #為可執行文件鏈接數學庫 ———————————————— 版權聲明:本文為CSDN博主「jupiterwangq」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。 原文鏈接:https://blog.csdn.net/ztemt_sw2/article/details/81355096
參考資料: