今回のネタは凄く短い・・・
実は、少しぶれてた・・
要は、複数ディレクトリーに色々なプロジェクトがあり、それらを全てコンパイル
する手順だった。
「glfw_app」の場合
drwxr-xr-x 1 hira None 0 9月 22 09:02 basic/ drwxr-xr-x 1 hira None 0 9月 22 09:05 bmc/ drwxr-xr-x 1 hira None 0 9月 22 09:09 cave/ drwxr-xr-x 1 hira None 0 7月 9 08:21 common/ drwxr-xr-x 1 hira None 0 9月 22 09:13 daev/ drwxr-xr-x 1 hira None 0 9月 21 12:43 dllcollect/ drwxr-xr-x 1 hira None 0 7月 9 08:21 docs/ drwxr-xr-x 1 hira None 0 9月 22 09:16 effv/ drwxr-xr-x 1 hira None 0 9月 22 09:16 gui_test/ drwxr-xr-x 1 hira None 0 9月 22 00:00 image/ drwxr-xr-x 1 hira None 0 9月 22 09:16 iod_make/ drwxr-xr-x 1 hira None 0 7月 9 08:21 libraries/ drwxr-xr-x 1 hira None 0 8月 17 15:38 MPU6050viewer/ drwxr-xr-x 1 hira None 0 9月 22 09:24 open_ide/ drwxr-xr-x 1 hira None 0 9月 22 09:24 piano_sim/ drwxr-xr-x 1 hira None 0 9月 21 22:21 player/ drwxr-xr-x 1 hira None 0 9月 22 09:25 pmdv/ drwxr-xr-x 1 hira None 0 9月 22 09:27 pn/ drwxr-xr-x 1 hira None 0 9月 22 09:27 spinv/ drwxr-xr-x 1 hira None 0 9月 22 09:28 vfs/ drwxr-xr-x 1 hira None 0 9月 22 09:29 vplayer/
一番簡単なのは、各プロジェクトのディレクトリーを指定して、「make」を実行す
る方法だ、しかしこれだと、プロジェクトが増える度に編集が必要となる。
RL78 では、xxx_sample をプロジェクトのディレクトリーとして、そのディレクト
リーに移動して「make」するスクリプトを作っていた。
ADC_sample/ DS1371_sample/ KiCAD_lib/ SDC_sample/ ADC_SWITCH_sample/ DS3231_sample/ LCD_DOT_sample/ SOFT_DELAY_sample/ ff12a/ LCD_FILER_sample/ START_BOARD/ ARITH_sample/ FIRST_sample/ LICENSE TMPtest/ BMP180_sample/ G13/ MPU6050_sample/ TOUCH_sample/ chip/ I2C_sample/ PWM_sample/ UART_sample/ common/ images/ R5F100LGA.jpg VS1063_PLAYER_sample/ DATA_FLASH_sample/ INTERVAL_TIMER_sample/ README.md WAV_PLAYER_sample/ Doxyfile INTERVAL_TIMER_TAU_sample/ rl78prog/
ただ、これだと、「rl78prog」内のツールはビルでされない・・
そこで、良く考えたら、「Makefile」が存在するディレクトリーだけ抜き出して、「make」
を起動すれば良いと判った、何でこんな簡単な事を思いつかなかったのか不思議である。
その要件に従い、shell スクリプトを作成した。
OS-X で期待した動作にならなかったので修正
「clean」を事前に全て実行するように修正
#!/bin/bash CMDNAME=`basename $0` if [[ $1 = "help" ]]; then echo "Usage: $CMDNAME [clean]" echo "" exit fi RED=`tput setaf 1` GREEN=`tput setaf 2` PINK=`tput setaf 5` LIGHTBLUE=`tput setaf 6` NOCOLOR=`tput sgr0` # make clean if [[ $1 = "clean" ]]; then for file in `ls -d *` do if [ -e "${file}/Makefile" ]; then cd "${file}" echo "${GREEN}Clean project: " ${file} "${NOCOLOR}" make clean >& /dev/null if [ $? -ne 0 ]; then echo "${RED}Error: " ${file} "${NOCOLOR}" echo "" break; fi cd .. fi done fi # make for file in `ls -d *` do if [ -e "${file}/Makefile" ]; then echo "${PINK}Start project: " ${file} "${NOCOLOR}" cd "${file}" make > /dev/null if [ $? -ne 0 ]; then echo "${RED}Compile error: " ${file} "${NOCOLOR}" echo "" break; fi cd .. echo "${LIGHTBLUE}Build project: " ${file} "${NOCOLOR}" fi done
これで、glfw_app、R8C、RL78 と全て動的に全ビルドが出来るようになった。
機能としては、
sh all_project_build.sh
単独で起動すれば、全体に「make」を行なう。
sh all_project_build.sh clean
とすれば、一旦「make clean」してから「make」する。
OS-X って、何で「echo」の「-e」
オプションが出来ないのか・・・