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