如何根据架构(ARMEL或i386)链接google test lib(libgtest.a)?

时间:2014-08-09 02:23:35

标签: c++ arm googletest

我在C ++项目中使用Google Test。我为我的i386虚拟机或真正的ARMEL目标构建了目标。我想要做的是将正确的架构中的Makefile链接放在正确的google test .a文件中,具体取决于主机系统。例如。如果我从i386 VM运行测试目标,我想在i386内置libgtest.a链接,并在构建我的ARMEL系统时同上。我怎么做?我没有交叉编译ARM构建,我在ARM目标硬件本身上构建它。我真的不想从头开始构建libtest.a,因为构建速度很慢。

我的Makefile是:


    CC = g++-4.7
    CXX := $(CC)
    SVNDEV := -D'SVN_REV="$(shell svnversion -n .)"'
    CFLAGS += -Os -Wall -Wno-write-strings $(SVNDEV) -Iinclude -I/usr/include/c++/4.7 -Llib
    CXXFLAGS += --std=c++11 -D_GLIBCXX_USE_NANOSLEEP $(CFLAGS)
    TARGET = connectionmanager
    LIBS = -lzmq -ljansson -lpthread
    objects = systeminterface.o linuxsysteminterface.o connectionmanagerutils.o connectionmanagerexception.o logger.o jsoninterface.o configuration.o  diagnosticslogger.o serial.o \
              modemstrategy.o lisac200modemstrategy.o maestrom1003gmodemstrategy.o
    test_objects = mocksysteminterface.o mockmodemstrategy.o test/connectionmanagertest.o test/connectionmanagerutiltest.o test/jsoninterfacetest.o test/gtest_main.o

    $(TARGET):      connectionmanager.o $(objects) $(LIBS)

    .PHONY: clean all test

    all: $(TARGET)

    cmmain.o: connectionmanager.cpp
            $(CXX) -DUNIT_TESTING $(CPPFLAGS) $(CXXFLAGS) -c connectionmanager.cpp -o cmmain.o

    connectionmanagertest : cmmain.o $(objects) $(test_objects) lib/libgtest.a $(LIBS)
            $(CXX) -DUNIT_TESTING $(CPPFLAGS) $(CXXFLAGS) $(LIBS) lib/libgtest.a $^ -o $@

    test: connectionmanagertest
            ./connectionmanagertest

    clean:
            rm -f $(TARGET)
            rm -f $(objects)
            rm -f $(test_objects)
            rm -f connectionmanager.o
            rm -f cmmain.o
            rm -f $(test_objects)

1 个答案:

答案 0 :(得分:1)

请看一下here。同样,您的问题看起来像是this的副本。作为建议 - 您可能对CMake感兴趣。另一个好处是解析Linux的proc / cpuinfo,如果你在FreeBSD上,可以使用sysctl call。无论如何,必须通过现有实用程序提取主系统信息的来源,该实用程序将返回结果以便稍后在Makefile中处理或使用标准系统工具。作为思想的来源,我还建议下载任何开源包并查看Makefile生成器。