我的开源项目分发了一个 Makefile。只要用户安装了 Boost 和 OpenSSL,“make”本身就可以正常工作。如果没有,他会得到一个编译错误。
我想向用户显示一条错误消息,其中包含有关如何修复的说明,而不是让他从编译器输出中辨别出问题。
我已经编写了一个小脚本嵌入到 Makefile 中,它将进行快速而肮脏的编译,以在允许构建核心代码之前验证是否存在先决条件头文件。如果代码无法编译,它会显示错误消息并中止编译。它似乎运作良好。
# BOOST_INCLUDE := -I/home/jselbie/boost_1_51_0
all: myapp
testforboost.o:
@echo "Testing for the presence of Boost header files..."
@rm -f testforboost.o
@echo "#include <boost/shared_ptr.hpp> " | $(CXX) $(BOOST_INCLUDE) -x c++ -c - -o testforboost.o 2>testerr; true
@rm -f testerr
@if [ -e testforboost.o ];\
then \
echo "Validated Boost header files are available";\
else \
echo "* ********************************************";\
echo "* Error: Boost header files are not avaialble";\
echo "* Consult the README file on how to fix";\
echo "* ********************************************";\
exit 1;\
fi
myapp: testforboost.o
$(CXX) $(BOOST_INCLUDE) myapp.cpp -o myapp
我的脚本是做到这一点的好方法吗?我假设它可以移植到 Linux(Solaris、BSD、MacOS)之外。还是有其他标准做法可以做到这一点?我知道 Autotools 可以做类似的事情,但我对学习所有 Autotools 和重写我的 Makefile 并不太兴奋。