C ++ makefile只会编译前3个条目

时间:2017-02-27 22:11:44

标签: c++ makefile

美好的一天, 最近我从jamfile切换到makefile。这种转换的原因是我认为jamfile并不真正与armadillo和openmp库合作。我的代码分为多个* .h和* .cpp文件。

# makefile for my PhD thesis
# Created by Michal Buday, no copyrights
# Datum: 01.07.2016
SHELL    := /bin/sh
SRC      := methods
BIN      := bin

CXX      := g++           # GNU C++ compiler
CXXFLAGS := -Wall       
ARMAF    := -larmadillo   # ARMADILLO matrix library

OPT      := -O
# GGG      := -g # for debugging
                 # bash$ gdp ${program name} core
# ===============================================================================================
# standard stuff
all:  coord_trans.o geodetic_functions.o geo_models.o interpolations.o \
      legendre.o loadpoints.o physical_constants.o sphere_int.o \
      3Dtransformations.o    

LIBOBJ = coord_trans.o geodetic_functions.o geo_models.o interpolations.o \
     legendre.o loadpoints.o physical_constants.o sphere_int.o \
     3Dtransformations.o #topo_corrections.o

geodetic_functions.o: $(SRC)/geodetic_functions.h
    $(CXX) $(OPT) -c $(SRC)/geodetic_functions.h -o $(BIN)/$@

geo_models.o: $(SRC)/geo_models.h $(SRC)/legendre.h $(SRC)/geodetic_functions.h \
              $(SRC)/physical_constants.h
    $(CXX) $(OPT) -c $(SRC)/geo_models.h -o $(BIN)/$@

interpolations.o: $(SRC)/interpolations.cpp $(SRC)/interpolations.h
    $(CXX) $(OPT) -c $(SRC)/interpolations.cpp -o $(BIN)/$@

legendre.o: $(SRC)/legendre.h
    $(CXX) $(OPT) -c $(SRC)/legendre.h -o $(BIN)/$@

loadpoints.o: $(SRC)/loadpoints.h
    $(CXX) $(OPT) -c $(SRC)/loadpoints.h -o $(BIN)/$@

sphere_int.o: $(SRC)/sphere_int.h $(SRC)/sphere_int.cpp
    $(CXX) $(OPT) -c $(SRC)/sphere_int.cpp $(ARMAF) -o $(BIN)/$@

#topo_corrections.o: $(SRC)/topo_corrections.h $(SRC)/geodetic_functions.h
#   $(CXX) $(OPT) -c $(SRC)/topo_corrections.h $(ARMAF)

3Dtransformations.o:  $(SRC)/3Dtransformations.h $(SRC)/3Dtransformations.cpp
    $(CXX) $(OPT) -c $(SRC)/3Dtransformations.cpp $(ARMAF) -o $(BIN)/$@

coord_trans.o: $(SRC)/coord_trans.h $(SRC)/geodetic_functions.h
    $(CXX) $(OPT) -c $(SRC)/coord_trans.h  -o $(BIN)/$@

main.o: $(LIBOBJ)
    $(CXX) $(OPT) $(BIN)/$(LIBOBJ) -o $@ $(ARMAF)


# ======================================================================== #
#


clean:
    rm *.o

依赖关系是:

# coord_trans.h  << geodetic_functions.h
# geodetic_functions.h << armadillo
# geo_models.h << legendre.h geodetic_functions.h physical_constants.h
# interpolations.h << std
# legendre.h << std
# loadpoints.h << std
# physical_constants.h << define only
# sphere_int.h << armadillo
# topo_corrections.h << geodetic_functions.h
# 3Dtransformations.h << armadillo

但是当我打电话时

  

请   在终端中,它只在makefile中创建前3个条目,并且二进制文件的大小也超过107 MB(代码本身有100k或更少)。我错过了什么?

感谢您的任何建议。

1 个答案:

答案 0 :(得分:0)

首先,您可能希望$<(第一个依赖)用于-c参数,而不是重复它。

另外,我建议在给定cpp文件(wildcard函数?)的情况下构建目标文件列表。

最后,您可能希望尝试使用以下构建的$(BIN)/$(LIBOBJ)替换$(FULLPATH_LIBOBJ)

FULLPATH_LIBOBJ = $(addprefix $(BIN)/, $(LIBOBJ))

不确定这会改变什么,但你的makefile看起来很复杂,而它应该更简单! 此外,如果没有项目本身,很难帮助您编译项目。