虽然有是做一个相当大的学习曲线,生成文件是首选的解决方案。在SO上,我也注意到了CMake的大量使用。
为你的Makefile更多的想法:
以下两条规则处理90%我简单的单元测试的可执行文件:
R01处理既.cc的文件和.hh
R02处理文件只有.cc
# pattern rule R01
# when any ARCHIVE changes, trigger a rebuild
% : %.cc %.hh $(LIB_ARCHIVEs)
@echo
@echo R01: $<
rm -f [email protected]
$(CC) $(CC_FLAGS) $< -o [email protected] $(LIB_DIRs) $(LIB_NMs)
# pattern rule R02
# when any ARCHIVE changes, trigger a rebuild
% : %.cc $(LIB_ARCHIVEs)
@echo
@echo R02: $<
rm -f [email protected]
$(CC) $(CC_FLAGS) $< -o [email protected] $(LIB_DIRs) $(LIB_NMs)
偶尔,我会添加特定的LIB名和目录...直接向LIB_DIRs和LIB_NMs定义在Makefile中。例如,在这里我添加-lrt和-pthread:
LIB_NMs += -lbag_i686 -lposix_i686 -lrt -pthread
bag_i686和posix_i686是图书馆我建...简单的C++类包装围绕Linux和POSIX功能。我的大部分单元测试都不会使用很多posix的东西,但是我不会感到悲伤。
使用C++ std :: thread,我很少使用-pthread。但是,我偶尔会使用posix信号量。
我的编译的命令行访问(在Ubuntu上的Emacs)提供了一个历史,所以偶尔的改变或添加命令行仅仅是一个“麻烦”一次。从此,新的命令在历史中可用。
我启动emacs的配置有“嵌入式”预先定义的编译命令:
USER_FLAGS='-O0 ' ; export USER_FLAGS ; time make CC='g++ -m64' -j 2 -k
此命令显示了第一时间我从emacs的内启动编译器。 Emacs提供它就好像该命令已经在'编译命令历史'中。
我手动缩短这一点,如果我不重建所有,平时我只建立一个单一的UT:
USER_FLAGS='-O0 ' ; export USER_FLAGS ; time make CC='g++ -m64'
因此,举例来说,当我准备编译dumy431.cc,我调用:
USER_FLAGS='-O0 ' ; export USER_FLAGS ; time make CC='g++ -m64' dumy431
我启动的下一个版本(从emacs编译中启动)以上一个命令开始,向上/向下箭头通过任何其他版本的命令。
利用这种形式的命令,我可以平凡从克++改变由在适当的位置插入“族”到铛++:
USER_FLAGS='-O0 ' ; export USER_FLAGS ; time make CC='clang++ -m64'
铛++通常提供额外的诊断使g ++不报告。要回滚到g ++,我可以在编译器命令面板中向上箭头(或编辑命令)。
这是一个小例子,其中我的单元测试代码有多个src文件。通常情况下,非主文件(如eng_format *)是我计划捕捉到我的图书馆之一以备将来使用代码:
FMssb.o : FMssb.cc FMssb.hh
@echo
@echo R_FMssb.o: $<
rm -f [email protected]
$(CC) $(CC_FLAGS) -c $< -o [email protected]
FMssb_ut : FMssb_ut.cc eng_format.o FMssb.o $(LIB_ARCHIVEs)
@echo
@echo R_FMssb_ut: $<
rm -f [email protected]
$(CC) $(CC_FLAGS) $< -o [email protected] eng_format.o FMssb.o $(LIB_DIRs) $(LIB_NMs)
eng_format.o : eng_format.cpp eng_format.hpp $(LIB_ARCHIVEs)
@echo
@echo R_EF: $<
rm -f [email protected]
$(CC) $(CC_FLAGS) -c $< -o [email protected] $(LIB_DIRs) $(LIB_NMs)
是否G ++调用铛链接? –
是的上述工作,但我认为最好的办法是创建make文件 – sger
既然你已经知道,一个Makefile是要走的路,你有什么问题? –