温馨提示:阅读本文的同学最好能了解makefile和python的编写规则。
不懂的同学能够先保存在收藏夹。以便日后查看。
事实上之前我一直非常懒,我不想了解makefile规则。由于在linux下开发我一直使用Qt creator。(非常多时候正是一些“懒人”的创造力。解放了我们的双手,显然如今我们还须要用双手写makefile)。Qt creator是一个非常好的IDE。并且能够跨平台开发。可是相比VS,显然还是不够优秀。
因此非常多开发人员都会选择在Windows下开发C/C++程序,然后部署在Linux下运行。当然我也不例外。所以近期花了几个晚上了解makefile的编写规则。
開始的时候。我參照网上一些makefile的样例,写了一个初版的makefile。然而这个makefile在编译我的project的时候报错。
主要出错体如今:
%.o: %.cpp
$(CXX) -fpic -c $(INCPATH) $< -o $@
当然能够写成
$(objdir)/%.o:$(srcdir)/%.cpp
$(CXX) -fpic -c $(INCPATH) $< -o $@
原因在于:
1、.o文件与.cpp文件处于不同的文件夹下。
2、不同的.o文件或不同的.cpp文件处于不同的文件夹下。
这时我找到两种解决方法:
1、就是用VPATH这个特殊变量,可是我不可能将全部要包括的文件夹都一一手动包括进来,于是我放弃。
2、就是把全部的编译规则列举出来。
我终于选择另外一种解决方法。
由于之前遇到这个困难时,我特意去了解Qt生成的makefile(事实上这个makefile是根据.proproject文件生成的)。而这个makefile正是将全部的编译规则都列举出来。
于是就有以下这个python脚本。事实上開始的时候我想用shell来做这一步工作的,可是我看到sed和awk。我头都晕,之前还一直抵触学习sed和awk。因此最后选择了python。
#encoding: utf-8
import os
import os.path
import sys
#sys.exit(0);
###################################################################################