iT邦幫忙

2023 iThome 鐵人賽

DAY 10
0

今天的目標是將CMakeList寫好,與Jenkins結合並完成Command Line的介面。
而在那之前我們先寫一個CMakeList來方便build流程

CMake

CMake是一套自動化的建置管理工具,透過CMake可以方便我們產生相應的Makefile。

我們先在ALISS的Folder底下建立好我們的檔案結構,分別為
https://ithelp.ithome.com.tw/upload/images/20230925/20162436ocH83Ih2pd.png

其中src, include, libs為一般project內常見的命名方式,通常有以下功能

  • src (Source Code):

用途:這是存放原始程式碼 (source code) 的資料夾。通常,你會將你的程式碼文件,如C++的.cpp檔案、Python的.py檔案,放在這個資料夾中。
好處:將原始程式碼放在一個統一的資料夾中有助於組織和維護你的專案。這也使得版本控制系統(如Git)更容易追蹤程式碼的變更。

  • include (Header Files):

用途:這是通常用於C和C++等語言的資料夾,用於存放頭文件(header files)或者稱為頭檔。頭文件包含了函數和類型的聲明,供其他程式碼文件包含和使用。
好處:使用頭文件可以提高程式碼的模組化,使程式碼更容易理解和維護。這也有助於解決多個程式碼文件之間的依賴性問題。

  • lib (Libraries):

用途:這個資料夾通常用於存放庫文件(libraries)。庫文件是已經編譯過的程式碼,可以在你的應用程式中使用。這些庫文件包含了函數和類型的實現,你可以在程式碼中引用它們,而不需要重新寫一次相同的程式碼。
好處:使用庫文件可以節省開發時間,減少程式碼重複性,並提高程式碼的可重用性。這也有助於減小最終應用程式的大小,因為你只需要包含你實際使用的部分庫文件。

而CMakeList.txt則為我們撰寫的CMake file,可以簡單理解為類似MakeFile的定位,其中內容如下
https://ithelp.ithome.com.tw/upload/images/20230925/20162436ybYVhHyBKx.png

分別對應為,命名一個叫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。

順利建置頁面
https://ithelp.ithome.com.tw/upload/images/20230925/20162436UXvgmwnTkO.png

命令介面

我們在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


上一篇
Day 9 - GIT + Jenkins環境建立
下一篇
Day 11 - TDD, GTest & CTest
系列文
從零開始的RISC-V ISA Simulator (Another Little RISC-V ISA Simulator)30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言