今天的目標是將CMakeList寫好,與Jenkins結合並完成Command Line的介面。
而在那之前我們先寫一個CMakeList來方便build流程
CMake
CMake是一套自動化的建置管理工具,透過CMake可以方便我們產生相應的Makefile。
我們先在ALISS的Folder底下建立好我們的檔案結構,分別為
其中src, include, libs為一般project內常見的命名方式,通常有以下功能
用途:這是存放原始程式碼 (source code) 的資料夾。通常,你會將你的程式碼文件,如C++的.cpp檔案、Python的.py檔案,放在這個資料夾中。
好處:將原始程式碼放在一個統一的資料夾中有助於組織和維護你的專案。這也使得版本控制系統(如Git)更容易追蹤程式碼的變更。
用途:這是通常用於C和C++等語言的資料夾,用於存放頭文件(header files)或者稱為頭檔。頭文件包含了函數和類型的聲明,供其他程式碼文件包含和使用。
好處:使用頭文件可以提高程式碼的模組化,使程式碼更容易理解和維護。這也有助於解決多個程式碼文件之間的依賴性問題。
用途:這個資料夾通常用於存放庫文件(libraries)。庫文件是已經編譯過的程式碼,可以在你的應用程式中使用。這些庫文件包含了函數和類型的實現,你可以在程式碼中引用它們,而不需要重新寫一次相同的程式碼。
好處:使用庫文件可以節省開發時間,減少程式碼重複性,並提高程式碼的可重用性。這也有助於減小最終應用程式的大小,因為你只需要包含你實際使用的部分庫文件。
而CMakeList.txt則為我們撰寫的CMake file,可以簡單理解為類似MakeFile的定位,其中內容如下
分別對應為,命名一個叫ALISS的project,設定C++的版本為C++11,將main.cxx命名為SOURCE_FILES並將SOURCE_FILES編成可執行檔,以此作為我們的第一版CMakeList。
設立好之後,我們可以執行以下動作,確認順利編譯完成
mkdir build
cd build
cmake ..
make
可看到執行檔ALISS,這代表編譯成功,同時我們將這段build code的flow加到Jenkins script內,並記得在Jenkins sever上安裝cmake。
順利建置頁面
命令介面
我們在main新增以下程式碼,完成簡易的command line介面,
int i = 0 ;
const char * elf_name = 0;
bool show_help;
for( i = 1; i < argc; i++ )
{
const char * param = argv[i];
if( param[0] == '-')
{
switch( param[1] )
{
case 'e': elf_name = (++i < argc) ? argv[i] : 0; break;
case 'h': show_help = 1; break;
default:
std::cout << "No command " << param[1] << std::endl;
show_help = 1;
break;
}
}
else
{
show_help = 1;
break;
}
param++;
}
if(show_help)
{
std::cout << "Help Help" << std::endl;
}
else
{
std::cout << elf_name << std::endl;
}
這樣後續要新增command的時後,只要去實現case即可。
碎碎念 : 今天IThome好像不太穩,趕緊先上傳一波。
明天來玩CTest及ELF Loader