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