如何在keil下实现单工程多目标的设置(选择性自动编译)
最近在研究Cortex-M系列CPU,整了一個(gè)工程來進(jìn)行不同MCU之間的移植測(cè)試,其中涉及到Cortex-M0、Cortex-M3、Cortex-M4等多款MCU。于是產(chǎn)生了一個(gè)想法,如何在Keil里面建立一個(gè)【單工程多目標(biāo)】的工程?換句話說就是,只有一個(gè)工程項(xiàng)目文件,將所有涉及到的代碼文件全部關(guān)聯(lián)進(jìn)去,但是在編譯的時(shí)候可以自由的選擇不同的目標(biāo)平臺(tái),進(jìn)而由編譯器自動(dòng)納入所需要的源文件進(jìn)行編譯,去除多余的文件,從而生成所對(duì)應(yīng)的目標(biāo)文件。這樣的事情,在linux下也就是一個(gè)腳本而已,但是在Keil下,我還沒有試過,不知道行不行。
不過,說干就干。咱就來試試吧。下面就以一個(gè)很簡(jiǎn)單的示例來介紹一下如何實(shí)現(xiàn)在同一個(gè)工程里實(shí)現(xiàn)不同目標(biāo)文件的自動(dòng)編譯。
一、規(guī)劃工程目錄
首先介紹一下我的示例工程的目錄架構(gòu)。
project目錄下存放工程文件,sources目錄下存放源代碼。為了簡(jiǎn)單起見,這里的源代碼只包含2個(gè),一個(gè)是所有工程共用的main模塊,一個(gè)是每個(gè)工程下不一樣的drv模塊。main模塊直接存放在sources目錄下,而drv模塊則分別存放于以不同型號(hào)mcu命名的子目錄下,如下圖:
二、建立項(xiàng)目工程
打開keil,建立工程文件。我這里的keil是5.0版本的,大家如果使用太舊的版本,可能會(huì)遇到其他問題,建議更新到這個(gè)版本。
輸入工程名,我輸入的是multi_project,確認(rèn)就可以建立出新的工程了。然后選擇“manage project items”,完成工程名、源碼目錄以及代碼文件的添加。如下圖:
注意:這里的cortex_m0、cortex_m3、cortex_m4指的就是上面所說的工程名字,接下去針對(duì)這里的每一個(gè)工程單獨(dú)進(jìn)行設(shè)置。選擇cortex_m0工程,點(diǎn)擊下方的“set as current target”按鈕,然后點(diǎn)擊OK關(guān)閉對(duì)話框!
這樣就將當(dāng)前的工程設(shè)置為了cortex_m0,而不是cortex_m3或者cortex_m4。這一點(diǎn),可以從下圖中看出。
三、設(shè)置工程屬性
1、設(shè)置編譯參數(shù)
再次右擊工程,不過這次不選item,而是選擇“options”,如下圖:
打開屬性對(duì)話框,完成工程相關(guān)屬性的設(shè)置,這里僅做貼圖演示,具體內(nèi)容就不一一解釋了。
完成所有設(shè)置之后,點(diǎn)擊確認(rèn),關(guān)閉對(duì)話框。
2、指定包含關(guān)系
接下去還要完成cortex_m0工程下的依賴目錄以及需要編譯的文件的指定。因?yàn)閙ain模塊是所有工程都需要包含的,所以無需額外設(shè)置。但是drv模塊是根據(jù)不同MCU來選擇的,因此,在cortex_m0工程里,我們只需要包含cortex_m0模塊對(duì)應(yīng)的drv模塊就好,其他兩款MCU的驅(qū)動(dòng)模塊不需要包含。于是要在cortex_m0對(duì)應(yīng)的drv模塊目錄上右擊,選擇屬性:
將其設(shè)置為本工程可用的狀態(tài)。
然后再分別選擇drv_m3和drv_m4兩個(gè)目錄,同理將其設(shè)置為不可用的狀態(tài)。
設(shè)置完成之后,再回到目錄視圖,可以看到被選擇為不可用的兩個(gè)drv目錄上,出現(xiàn)了一個(gè)紅色的禁用標(biāo)志:
3、完成其他工程的設(shè)置
至此完成了cortex_m0工程的選項(xiàng)設(shè)置。于是,接下去還要依葫蘆畫瓢的完成cortex_m3工程、以及cortex_m4工程的選項(xiàng)設(shè)置。具體辦法是,再次右擊工程,選擇“manage project items”,在彈出的窗口中,選擇cortex_m3作為當(dāng)前活動(dòng)工程。如下圖所示:
然后再重復(fù)上述步驟,完成cortex_m3工程的選項(xiàng)設(shè)置。之后再重復(fù)一次本輪操作,完成cortex_m4工程的選項(xiàng)設(shè)置。
最終實(shí)現(xiàn)的效果,可在目錄結(jié)構(gòu)視圖中再次得到確認(rèn):
可以看到,在m3的工程中,m0和m4的驅(qū)動(dòng)模塊組已被禁用,而在m4的工程中,m0和m3的驅(qū)動(dòng)模塊組已被禁用。這就實(shí)現(xiàn)了不同工程下的關(guān)聯(lián)文件的適配。
至此,完成了上述3個(gè)工程的全部設(shè)置過程。將你所需要的工程設(shè)置為當(dāng)前的活動(dòng)工程,然后點(diǎn)擊編譯,系統(tǒng)就會(huì)自動(dòng)識(shí)別出所關(guān)聯(lián)的文件并編譯出對(duì)應(yīng)的目標(biāo)文件。如下圖所示:
四、附錄
為了便于交流,將本文中所演示的示例工程,打包上傳在本人的CSDN中,有需要者可以自行下載。網(wǎng)址是(http://download.csdn.net/download/leon1741/10139351)。
總結(jié)
以上是生活随笔為你收集整理的如何在keil下实现单工程多目标的设置(选择性自动编译)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大跃进了!今年小米新机都将抛弃USB 2
- 下一篇: Excel 2016双击无法打开文件的解