我有一个代码库,我想用它来制作两个不同的“目标” 一个需要我用g ++编译(我们使用gtest作为单元测试目标),另一个需要gcc4我们的deleivered代码是ANSI C.
我正在尝试使用gnu make的目标特定变量来实现这个
所以我有
unit_test_target: CC=g++
unit_test_target: unit_test_pre-reqs
recipe
和
lab_target:CC=gcc4
lab_target: lab_pre_reqs
recipe
CC变量似乎没有被用于制作我已经找到解释的预先请求。但我没有看到如何实现这一目标。
提前致谢
柯林斯
更多细节......
TESTSUBDIRS = dir1 dir1 / testing dir2 dir2 / testing
.PHONY:testsubdirs $(TESTSUBDIRS)
testsubdirs:$(TESTSUBDIRS)
$(TESTSUBDIRS):objdir
$(MAKE)-e -C $ @
objdir:$(CSPLATFORMDIR)/ makebuilddir
$(CSPLATFORMDIR)/ makebuilddir $(BUILDDIR)
LAB4DIRS = dir1 dir2
.PHONY:t100lab4dirs $(LAB4DIRS)
lab4dirs:$(LAB4DIRS)
$(T100LAB4SDIRS):objdir
$(MAKE)-e -C $ @
gtest:CC = g ++
gtest:$(CSPLATFORMDIR)/ makebuilddir $(TESTSUBDIRS)
$(CSPLATFORMDIR)/ makebuilddir $(BUILDDIR)
$(AR)-r $(TARGET)$(OBJS)
ls -l $(TARGET)
g ++ -I $(BUILDDIR)/ .. -I $(BUILDDIR)../../ inc -I $(GTESTINC)$(BUILDDIR)/ *。o -lpthread $(GTESTDIR)/make/gtest_main.a - o $(BUILDDIR)/ gtest
lab_target.a:CC = GCC4
lab_target.a:$(CSPLATFORMDIR)/ makebuilddir $(T100LAB4DIRS)
$(CSPLATFORMDIR)/ makebuilddir $(BUILDDIR)
$(AR)-r $(TARGET)$(OBJS)
ls -l $(TARGET)
答案 0 :(得分:0)
您可以使用GNU make if
条件来设置变量,但不能基于目标。这通常通过让需要使用C ++的目标使用$(CXX)
作为编译器来解决,并且需要使用C的目标使用$(CC)
来解决。然后适当设置这些单独的变量。我认为这也是最好的方式。