代码之家  ›  专栏  ›  技术社区  ›  Chris Tonkinson

自动选择要编译的对象文件

  •  0
  • Chris Tonkinson  · 技术社区  · 14 年前

    GoogleTest )用于C++项目。构建主项目相当简单:我使用GCC -MM -MD 标记为自动生成对象文件的依赖项,然后将所有对象文件链接在一起以获得输出可执行文件。没有惊喜。

    4 回复  |  直到 14 年前
        1
  •  1
  •   zwol    14 年前

    main 函数和单元测试不需要互相调用。

    如果所有这些都是真的,那么您可以将第一组中的所有文件放在一个静态库中,并将每个单元测试链接到该库中。链接器将只自动从库中提取所需的对象文件。

    具体来说:

    LIBRARY_OBJECTS = a.o b.o c.o d.o # etc
    UNIT_TESTS = u1 u2 u3 u4 # etc
    UNIT_TEST_OBJECTS = $(UNIT_TESTS:=.o)
    
    libprogram.a: $(LIBRARY_OBJECTS)
            ar cr $@ $?
    
    $(UNIT_TESTS): %: %.o libprogram.a
            $(CC) $(CFLAGS) -o $@ $< -lprogram
    
        2
  •  1
  •   Eli    14 年前

    你应该关注更高层次的项目管理抽象,比如 Cmake GNU Automake

        3
  •  0
  •   rlduffy    14 年前

    在Makefile中

         SOURCES.cpp = a.cpp b.cpp ...
         OBJECTS = $(SOURCES.cpp:%.cpp=%.o)
    
         all: program
    
         program: $(OBJECTS)
              $(LINK) -o $@ $(OBJECTS)
    
        4
  •  0
  •   Beta    14 年前

    也许,这取决于你的测试系统有多有序。

    如果头文件和源文件之间有很好的一对一关系,那么可以使用一些文本转换函数(或对sed的调用)来转换机器生成的规则:

    foo.o: foo.cc foo.h bar.h gaz.h
    

    相应测试的规则:

    unit_test_foo: unit_test_foo.o foo.o stub_bar.o stub_gaz.o
    

    除了