美好的一天, 最近我从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或更少)。我错过了什么?
感谢您的任何建议。
答案 0 :(得分:0)
首先,您可能希望$<
(第一个依赖)用于-c
参数,而不是重复它。
另外,我建议在给定cpp文件(wildcard
函数?)的情况下构建目标文件列表。
最后,您可能希望尝试使用以下构建的$(BIN)/$(LIBOBJ)
替换$(FULLPATH_LIBOBJ)
:
FULLPATH_LIBOBJ = $(addprefix $(BIN)/, $(LIBOBJ))
不确定这会改变什么,但你的makefile看起来很复杂,而它应该更简单! 此外,如果没有项目本身,很难帮助您编译项目。