clion之CMakeLists的學習



什么是CMake

CMake是一個跨平台的安裝(編譯)工具,可以用簡單的語句來描述所有平台的安裝(編譯過程)。他能夠輸出各種各樣的makefile或者project文件,能測試編譯器所支持的“C++”特性,類似UNIX下的automake。只是 CMake 的組態檔取名為 CMakeLists.txt。Cmake 並不直接建構出最終的軟件,而是產生標准的建構檔(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依一般的建構方式使用。這使得熟悉某個集成開發環境(IDE)的開發者可以用標准的方式建構他的軟件,這種可以使用各平台的原生建構系統的能力是 CMake 和 SCons 等其他類似系統的區別之處。


在 linux 平台下使用 CMake 生成 Makefile 並編譯的流程如下:
1.編寫 CMake 配置文件 CMakeLists.txt 。
2.執行命令 cmake PATH 或者 ccmake PATH 生成 Makefile ccmake和cmake 的區別在於前者提供了一個交互式的界面 其中, PATH 是 CMakeLists.txt 所在的目錄。
3.使用 make 命令進行編譯。


本人在使用JetBrains公司的clion時發現有時候代碼本身沒有問題,但是一旦編譯運行就會報類似於這樣的錯誤:

undefined reference to `split(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
collect2.exe: error: ld returned 1 exit status

明明調用的是內部的語法,但是卻報錯了,經過一番百度,發現是clion中的CMakeLists.txt文件內容出現了一點問題,因此我們有必要稍微學習一下簡單的CMakeLists.txt 配置文件的編寫。


入門案例

單個源文件:main.cpp

編寫CMakeLists.txt

#CMake最低版本號要求
cmake_minimum_required(VERSION 3.12)
#項目信息
project(chapter5_01)
#使用C++ 11標准
set(CMAKE_CXX_STANDARD 11)
#指定生成目標
add_executable(chapter5_01 main.cpp)

CMakeLists.txt 的語法比較簡單,由命令、注釋和空格組成,其中命令是不區分大小寫的。符號 # 后面的內容被認為是注釋。命令由命令名稱、小括號和參數組成,參數之間使用空格進行間隔。
對於上面的CMakeLists.txt文件,依次出現了如下幾個命令:
1.cmake_minimum_required :指定運行此程序所需要的CMake的最低版本
2.project :參數為:'chapter5_01',表示該項目名稱是:chapter5_01
3.set:參數為:CMAKE_CXX_STANDARD 11,表示:設置C++標准為 C++ 11
4.add_executable:參數為:chapter5_01main.cpp,表示:將名為main.cpp的文件編譯為名為chapter5_01的可執行文件

進階案例

同一目錄,多個源文件:main.cpp intercept.cpp intercept.h

編寫CMakeLists.txt

#CMake最低版本號要求
cmake_minimum_required(VERSION 3.12)
#項目信息
project(chapter5_01)
#使用C++ 11標准
set(CMAKE_CXX_STANDARD 11)
#指定生成目標
add_executable(chapter5_01 main.cpp intercept.cpp)

對於該CMakeLists.txt文件,不同之處在於add_executable的參數,新增加了intercept.cpp,因為我們在源文件中用到了該文件


在上面我們所說的問題很有可能就是這里出現了問題,當你在創建了一個新的源文件時,clion的CMakeLists.txt文件沒有更新,這是我們只需要手動添加這些文件到add_executable的參數里就可以了



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM