TOOL_BINS := ${TOOL_OBJS:.o=.bin}
EXAMPLE_BINS := ${EXAMPLE_OBJS:.o=.bin}
TEST_BINS := ${TEST_OBJS:.o=.testbin}
-TEST_ALL_BIN := $(BUILD_DIR)/src/$(PROJECT)/test/test_all.testbin
+TEST_BUILD_SUB_DIR := src/$(PROJECT)/test
+TEST_DIR = $(BUILD_DIR)/$(TEST_BUILD_SUB_DIR)
+TEST_ALL_BIN := $(TEST_DIR)/test_all.testbin
+# A shortcut to the directory of test binaries for convenience.
+TEST_DIR_LINK := $(BUILD_DIR)/test
##############################
# Derive include and lib directories
##############################
# Define build targets
##############################
-.PHONY: all init test clean linecount lint tools examples py mat distribute \
- py$(PROJECT) mat$(PROJECT) proto runtest \
- superclean supercleanlist supercleanfiles
+.PHONY: all init test clean linecount lint tools examples distribute \
+ py mat py$(PROJECT) mat$(PROJECT) proto runtest \
+ superclean supercleanlist supercleanfiles \
+ testshortcut
all: init $(NAME) $(STATIC_NAME) tools examples
@echo $(CXX_OBJS)
runtest: $(TEST_ALL_BIN)
$(TEST_ALL_BIN) $(TEST_GPUID)
-$(TEST_BINS): %.testbin : %.o $(GTEST_OBJ) $(STATIC_NAME) $(TEST_HDRS)
- $(CXX) $(TEST_MAIN_SRC) $< $(GTEST_OBJ) $(STATIC_NAME) -o $@ $(CXXFLAGS) $(LDFLAGS) $(WARNINGS)
+$(TEST_BINS): %.testbin : %.o $(GTEST_OBJ) $(STATIC_NAME) $(TEST_HDRS) testshortcut
+ $(CXX) $(TEST_MAIN_SRC) $< $(GTEST_OBJ) $(STATIC_NAME) \
+ -o $@ $(CXXFLAGS) $(LDFLAGS) $(WARNINGS)
-$(TEST_ALL_BIN): $(GTEST_OBJ) $(STATIC_NAME) $(TEST_OBJS)
- $(CXX) $(TEST_MAIN_SRC) $(TEST_OBJS) $(GTEST_OBJ) $(STATIC_NAME) -o $(TEST_ALL_BIN) $(CXXFLAGS) $(LDFLAGS) $(WARNINGS)
+$(TEST_ALL_BIN): $(GTEST_OBJ) $(STATIC_NAME) $(TEST_OBJS) testshortcut
+ $(CXX) $(TEST_MAIN_SRC) $(TEST_OBJS) $(GTEST_OBJ) $(STATIC_NAME) \
+ -o $(TEST_ALL_BIN) $(CXXFLAGS) $(LDFLAGS) $(WARNINGS)
+
+testshortcut: $(TEST_DIR_LINK)
+
+$(TEST_DIR_LINK): $(TEST_DIR)
+ @ln -s $(TEST_BUILD_SUB_DIR) $(TEST_DIR_LINK)
+
+$(TEST_DIR):
+ @mkdir -p $(TEST_DIR)
$(TOOL_BINS): %.bin : %.o $(STATIC_NAME)
$(CXX) $< $(STATIC_NAME) -o $@ $(CXXFLAGS) $(LDFLAGS) $(WARNINGS)