codelite建立工程build后会生成一个.mk文件,然后可以直接make -f *.mk编译,很方便,但是美中不足的是生成的.mk文件中有绝对路径,拷贝给别人后就有点麻烦。
比如:
$(IntermediateDirectory)/check.cpp$(ObjectSuffix): check.cpp $(IntermediateDirectory)/check.cpp$(DependSuffix)
$(CXX) $(IncludePCH) $(SourceSwitch) "/home/usrname/workspace/project/check.cpp" $(CXXFLAGS) $(ObjectSwitch)$(IntermediateDirectory)/check.cpp$(ObjectSuffix) $(IncludePath)
"/home/usrname/workspace/project/check.cpp" 就是绝对路径。
将codelite-12.0/Plugin/builder_gnumake.cpp文件中762行
compilationLine.Replace(wxT("$(FileName)"), filenameOnly);
compilationLine.Replace(wxT("$(FileFullName)"), fullnameOnly);
compilationLine.Replace(wxT("$(FileFullPath)"), fullpathOnly);
compilationLine.Replace(wxT("$(FilePath)"), relPath);
替换为
compilationLine.Replace(wxT("$(FileName)"), filenameOnly);
compilationLine.Replace(wxT("$(FileFullName)"), fullnameOnly);
wxString filename_in_prj = fullpathOnly.replace(0, cwd.length(), wxT("."));
compilationLine.Replace(wxT("$(FileFullPath)"), filename_in_prj);
compilationLine.Replace(wxT("$(FilePath)"), relPath);
然后.mk文件为
$(IntermediateDirectory)/check.cpp$(ObjectSuffix): check.cpp $(IntermediateDirectory)/check.cpp$(DependSuffix)
$(CXX) $(IncludePCH) $(SourceSwitch) "./check.cpp" $(CXXFLAGS) $(ObjectSwitch)$(IntermediateDirectory)/check.cpp$(ObjectSuffix) $(IncludePath)
可以看到变成了相对路径