
因?yàn)闀?huì)經(jīng)常寫c的小demo所以也就用不上項(xiàng)目工程編譯工具make那么導(dǎo)致我每次修改為代碼就需要gcc demo.c -g -o demo操作,然后就想著用shell進(jìn)行自動(dòng)化執(zhí)行,然后雛型就出來(lái)了
c
#!/bin/bash
path=`pwd`
source_file=`ls ${path}/*.c`
gcc $source_file -o ${source_file%.*} -g
${source_file%.*}編寫如上內(nèi)容,然后命名為c再放入到/usr/local/bin目錄下并給它可執(zhí)行權(quán)限chmod +x c,就可以在任意目錄執(zhí)行了
這里就是簡(jiǎn)單的獲取需要執(zhí)行編譯腳本的路徑,然后進(jìn)行一個(gè)編譯+運(yùn)行操作
$ ls;cat demo.c [~/tmp]
demo.c
#includeint main(){printf("hi\n");
return 0;
} 然后執(zhí)行c那么就可以直接看到結(jié)果了
$ c [~/tmp]
hi
$ ls [~/tmp]
demo* demo.c demo.dSYM/很顯然這只是一個(gè)簡(jiǎn)單的功能實(shí)現(xiàn)雛型,為了將它工具化就需要對(duì)不同的使用場(chǎng)景和使用功能考慮,上述的問(wèn)題有:
.c文件時(shí)c++時(shí)然后完善上面的問(wèn)題后的腳本為
#!/bin/bash
path=`pwd`
build_type="$1"
if [ "$build_type" == "++" ];then
c="g++"; file=`ls ${path}/*.cpp`; shift
else
c="gcc"; file=`ls ${path}/*.c` ;fi
main(){find_source_file
build $*
}
find_source_file(){source_file=$(echo $file | awk '{print $1}')
multi_file=$(echo $file | awk '{print $2}')
if [ -z "$source_file" ];then echo -e "\033[31mCouldn't find format $c source file\033[0m";exit ;fi
if [ ! -z "$multi_file" ];then echo -e "\033[31mMultiple files checked~\033[0m"; echo -e "\033[31mThe $source_file file will be used\033[0m" ;fi
}
build(){$c $source_file -o ${source_file%.*} -g $*
${source_file%.*}
}
main $*那么就來(lái)玩玩。c\cpp源代碼如下:
$ cat demo.c demo.cpp [/t/d/demo]
#includeint main(){printf("c\n");
return 0;
}
#includeint main(){printf("cpp!\n");
return 0;
} 測(cè)試
$ ls [/t/d/demo]
demo.c demo.cpp demo.dSYM/
$ c [/t/d/demo]
c
$ c ++ [/t/d/demo]
cpp!當(dāng)前目錄存在多個(gè)源代碼時(shí)
$ ls [/t/d/demo]
demo* demo.c demo.cpp demo.dSYM/ democc.c democc.cpp
$ c [/t/d/demo]
Multiple files checked~
The /tmp/demo/demo/demo.c file will be used
c
$ c ++ [/t/d/demo]
Multiple files checked~
The /tmp/demo/demo/demo.cpp file will be used
cpp!為了方便大家搭建使用,可以執(zhí)行下面代碼一鍵搭建完成
echo "IyEvYmluL2Jhc2gKcGF0aD1gcHdkYApidWlsZF90eXBlPSIkMSIKCmlmIFsgIiRidWlsZF90eXBlIiA9PSAiKysiIF07dGhlbgoJYz0iZysrIjsJZmlsZT1gbHMgJHtwYXRofS8qLmNwcGA7CXNoaWZ0CmVsc2UKCWM9ImdjYyI7CWZpbGU9YGxzICR7cGF0aH0vKi5jYCA7ZmkKCm1haW4oKXsKCWZpbmRfc291cmNlX2ZpbGUKCWJ1aWxkICQqCn0KCmZpbmRfc291cmNlX2ZpbGUoKXsKCXNvdXJjZV9maWxlPSQoZWNobyAkZmlsZSB8IGF3ayAne3ByaW50ICQxfScpCgltdWx0aV9maWxlPSQoZWNobyAkZmlsZSB8IGF3ayAne3ByaW50ICQyfScpCglpZiBbIC16ICIkc291cmNlX2ZpbGUiIF07dGhlbgllY2hvIC1lICJcMDMzWzMxbUNvdWxkbid0IGZpbmQgZm9ybWF0ICRjIHNvdXJjZSBmaWxlXDAzM1swbSI7ZXhpdCA7ZmkKCWlmIFsgISAteiAiJG11bHRpX2ZpbGUiIF07dGhlbgllY2hvIC1lICJcMDMzWzMxbU11bHRpcGxlIGZpbGVzIGNoZWNrZWR+XDAzM1swbSI7CWVjaG8gLWUgIlwwMzNbMzFtVGhlICRzb3VyY2VfZmlsZSBmaWxlIHdpbGwgYmUgdXNlZFwwMzNbMG0iIDtmaQp9CgpidWlsZCgpewoJJGMgJHNvdXJjZV9maWxlIC1vICR7c291cmNlX2ZpbGUlLip9IC1nICQqCgkke3NvdXJjZV9maWxlJS4qfQp9CgptYWluICQqCg==" | base64 -d >/usr/local/bin/c && chmod a+x /usr/local/bin/c方法二后來(lái)我看到了這篇文章https://zhuanlan.zhihu.com/p/143231248 這種設(shè)計(jì)就是運(yùn)用了我上面所說(shuō)的沒有指定Shebang字符頭那么就會(huì)默認(rèn)交給sh解釋器執(zhí)行,作者說(shuō)了其實(shí)就是在c源代碼里面執(zhí)行shell語(yǔ)法進(jìn)行編譯自身,但同時(shí)不能被c編譯器給發(fā)現(xiàn)錯(cuò)誤
這里發(fā)現(xiàn)作者的代碼有點(diǎn)小錯(cuò)誤,只需要把"./$proName" 改成->“$proName就可以了”
簡(jiǎn)單改寫如下:demo.c
#if 0
pro=${0%.*} && gcc $0 -o $pro $@ && $pro && exit
#endif
#includeint main(){printf("c\n");
return 0;
} 首先你必須給demo.c執(zhí)行權(quán)限然后直接執(zhí)行./demo.c,因?yàn)闆]有指定Shebang字符頭所以會(huì)默認(rèn)將demp.c交給sh解釋器執(zhí)行語(yǔ)句,當(dāng)sh解釋器遇到#時(shí)會(huì)將它視為單行注釋,然后會(huì)正常的執(zhí)行編碼命令。直到exit后退出執(zhí)行
而因?yàn)?code>#if #endif在c編譯器里面也是一個(gè)合法的注視命令,所以c編譯器會(huì)過(guò)濾掉文件頭部一塊,從而編譯成功
這種方法也不錯(cuò),但是需要每次都添加上述的一個(gè)頭部shell代碼,如果你是一個(gè)vim用戶那么你可以直接在init.vim中添加上述的頭部shell代碼到你的c\c++模版中
if &filetype == 'cpp'
call setline(1, "#if 0")
call setline(2, "pro=${0%.*} && gcc $0 -o $pro $@ && $pro && exit")
call setline(3, "#endif")
call setline(4, "")
call setline(5, "#include")
call setline(6, "")
call setline(7, "int main(){")
call setline(8, "")
call setline(9, " printf(\"\\n\");")
call setline(10, " return 0;")
call setline(11, "}")
endif
if &filetype == 'c'
...
endif 方法三可以在vim里面添加一個(gè)函數(shù),也就是一鍵執(zhí)行編譯,這里網(wǎng)上一把大就不說(shuō)了
方法四還有一種就是使用tcc,我不想額外的搭建環(huán)境,所以大家自行探索
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
本文名稱:一鍵編譯+執(zhí)行c語(yǔ)言小Demo-創(chuàng)新互聯(lián)
URL網(wǎng)址:http://chinadenli.net/article48/dphihp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、標(biāo)簽優(yōu)化、網(wǎng)頁(yè)設(shè)計(jì)公司、建站公司、網(wǎng)站導(dǎo)航、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容