2016-02-26 1 views
1

Впервые я использую тест Google для написания некоторых модульных тестов. Раньше я делал некоторые базовые make-файлы, но у меня возникли проблемы с изменением тестового шаблона Google (https://googletest.googlecode.com/[email protected]/trunk/make/Makefile).Попытка установить make-файл для кода + модульные тесты

Моя структура каталогов:

. 
├── bin/ 
├── Makefile 
├── src/ 
│   ├── x.cpp 
├── test/ 
│   └── tests.cc 

я добавил свои тесты без проблем, но есть некоторые вопросы:

  • Я хочу, чтобы поместить все в бункерном реже. Я попытался сделать это, добавив -o $(BIN_DIR)/[email protected], но затем unittest не удалось найти tests.o и gtest_main.a
  • Я также хочу построить код из моего каталога src.

Это то, что у меня есть:

# A sample Makefile for building Google Test and using it in user 
# tests. Please tweak it to suit your environment and project. You 
# may want to move it to your project's root directory. 
# 
# SYNOPSIS: 
# 
# make [all] - makes everything. 
# make TARGET - makes the given target. 
# make clean - removes all files generated by make. 

# Please tweak the following variable definitions as needed by your 
# project, except GTEST_HEADERS, which you can use in your own targets 
# but shouldn't modify. 

# Points to the root of Google Test, relative to where this file is. 
# Remember to tweak this if you move this file. 
GTEST_DIR = /home/aaron/googletest/googletest 

# Where to find user code. 
SRC_DIR = ./src 
TEST_DIR = ./test 
BIN_DIR = ./bin 

# Flags passed to the preprocessor. 
# Set Google Test's header directory as a system directory, such that 
# the compiler doesn't generate warnings in Google Test headers. 
CPPFLAGS += -isystem $(GTEST_DIR)/include 

# Flags passed to the C++ compiler. 
CXXFLAGS += -g -O0 -std=c++11 -pedantic -Wall -Wextra -pthread 

# All tests produced by this Makefile. Remember to add new tests you 
# created to the list. 
TESTS = unittest 

# All Google Test headers. Usually you shouldn't change this 
# definition. 
GTEST_HEADERS = $(GTEST_DIR)/include/gtest/*.h \ 
       $(GTEST_DIR)/include/gtest/internal/*.h 

# House-keeping build targets. 

all : $(TESTS) 

clean : 
    rm -rf $(BIN_DIR)/* 

# Builds gtest.a and gtest_main.a. 

# Usually you shouldn't tweak such internal variables, indicated by a 
# trailing _. 
GTEST_SRCS_ = $(GTEST_DIR)/src/*.cc $(GTEST_DIR)/src/*.h $(GTEST_HEADERS) 

# For simplicity and to avoid depending on Google Test's 
# implementation details, the dependencies specified below are 
# conservative and not optimized. This is fine as Google Test 
# compiles fast and for ordinary users its source rarely changes. 
gtest-all.o : $(GTEST_SRCS_) 
    $(CXX) $(CPPFLAGS) -I$(GTEST_DIR) $(CXXFLAGS) -c \ 
      $(GTEST_DIR)/src/gtest-all.cc 

gtest_main.o : $(GTEST_SRCS_) 
    $(CXX) $(CPPFLAGS) -I$(GTEST_DIR) $(CXXFLAGS) -c \ 
      $(GTEST_DIR)/src/gtest_main.cc 

gtest.a : gtest-all.o 
    $(AR) $(ARFLAGS) [email protected] $^ 

gtest_main.a : gtest-all.o gtest_main.o 
    $(AR) $(ARFLAGS) [email protected] $^ 

# Builds a sample test. A test should link with either gtest.a or 
# gtest_main.a, depending on whether it defines its own main() 
# function. 
tests.o : $(TEST_DIR)/tests.cc $(GTEST_HEADERS) 
    $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(TEST_DIR)/tests.cc 

unittest : tests.o gtest_main.a 
    $(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o [email protected] 

Есть больше шаблон я использую начать с (не только для испытаний в данном случае), или что я делаю не так?

ответ

0

Ну вы пробовали добавлять BINDIR к вашей линии зависимости, как это:

unittest: $(BIN_DIR)/tests.o $(BIN_DIR)/gtest_main.c 

Рассматривали ли вы с помощью CMake? ИМХО гораздо проще настроить googlte-тест с cmake.