2012-01-24 6 views
2

メイクファイルを作成しました。これを変更すると、makeを実行すると1つ以上のターゲットが生成されます。私のプログラムで複数のターゲット用のメークファイルを作成する

私は自己定義済みマクロ(例えばTIMEREG_DEBUG)を使用し、私は私のMakefileの私には1つのアウト定義済みのマクロを使用してターゲット、REGと1とREGと別のものを生成することをそのようにしたいと思いますおよびTIME

私が望むのは、Makefileからの合理的な希望です。そうでない場合は、教えてください。

PS:

勧告は喜ん

を除外されるだろう、私はここで を使用していますが、私のMakefileです:@trojanfoeの回答に基づいて

CXX = g++ 
SOURCES = random.cpp 
OBJECTS = $(SOURCES:.cpp=.o) 
EXECUTABLE = random-64bit 
DEBUG = -g -p -ggdb 
CXXFLAGS = -Wall -ansi -pedantic -W -pipe -O3 -std=gnu++0x -march=native \ 
    --fast-math -ftree-vectorize -ffast-math -D NDEBUG \ 
    -D TIME -D REG -D _DEBUG 
#CXXFLAGS+=$(DEBUG) 
DEPS = def_type.hpp \ 
    ls_regression.hpp \ 
    network.hpp \ 
    statistics.hpp \ 
    knot.hpp \ 
    nachbarn.hpp \ 
    $(SOURCES:.cpp=.hpp) \ 
    zufallszahlengenerator.hpp 
INCLUDES = -I/home/phymihsa/eigen/ -I/home/phymihsa/boost_1_48_0 
LIBPATH = -L/usr/local/lib64 
LDFLAGS = -lm 

all: $(SOURCES) $(EXECUTABLE) 

$(EXECUTABLE): $(OBJECTS) $(DEPS) 
    $(CXX) $(LIBPATH) $(OBJECTS) -o [email protected] 

.cpp.o: $< 
    $(CXX) $(LIBPATH) $(INCLUDES) $(LDFLAGS) $(CXXFLAGS) -c $< 

%.o: %.cpp 
    $(CXX) $(LIBPATH) $(INCLUDES) $(LDFLAGS) $(CXXFLAGS) -c $< 


.PHONY: clean 

clean: 
    rm -rf $(OBJECTS) $(EXECUTABLE) *~ p1 *.o 

EDIT

、私はそれが配列を使用することが可能かどうかを知っているだろう

OBJECTS = $(SOURCES:.cpp=_none.o) $(SOURCES:.cpp=_reg.o) $(SOURCES:.cpp=_reg_time.o) 
EXECUTABLE = $(SOURCES:.cpp=_none) $(SOURCES:.cpp=_reg) $(SOURCES:.cpp=_reg_time) 

それぞれに1つずつ書き込むのではなく、

+0

あなたはCMakeを考えましたか?このようなことは本当にうまいです。 – spraff

+0

@spraff、私はそれに精通していないので、私はCMakeについて考えていない。 – Eagle

+0

よく、私はそれを試してみることを強くお勧めします。私は一度も振り返らない。 – spraff

答えて

2

を私が探していたものです。

CXX = g++ 
OPTIONS := none reg reg_inter reg_time 
    none_CXXFLAGS := 
    reg_CXXFLAGS := -D REG 
reg_inter_CXXFLAGS := $(reg_CXXFLAGS) -D INTERMEDIATE_STEP 
reg_time_CXXFLAGS := $(reg_CXXFLAGS) -D TIME 
EXECUTABLES = $(addprefix random_,$(OPTIONS)) 
DEBUG = -g3 -p -ggdb 
CXXFLAGS = -Wall -ansi -pedantic -W -pipe -O3 -std=gnu++0x -march=core2 -mtune=core2 \ 
      --fast-math -ftree-vectorize -ffast-math -D NDEBUG 
CXXFLAGS+=$(DEBUG) 
DEPS = def_type.hpp \ 
     ls_regression.hpp \ 
     network.hpp \ 
     statistics.hpp \ 
     knot.hpp \ 
     nachbarn.hpp \ 
     zufallszahlengenerator.hpp 
INCFLAGS = -I/usr/include/eigen3 -I/usr/include/boost_1_48 
LIBPATH = -L/usr/lib64 
LDFLAGS = -lm 

.PHONY: all 
all: $(EXECUTABLES) 

random_%: random_%.o 
    $(CXX) $(LDFLAGS) $(LIBPATH) $^ -o [email protected] 

random_%.o : random.cpp $(DEPS) 
    $(CXX) $(INCFLAGS) $(CXXFLAGS) $($*_CXXFLAGS) -c $< -o [email protected] 

.PHONY: clean 
clean: 
    rm -rf $(OBJECTS) $(EXECUTABLES) *~ p1 *.o 

この溶液中での変数の使用の代わりに、それぞれの時間を書いて、すべてのテキスト

があります

について

0

random.cppと3つの異なる実行可能ファイルから3つの異なるバージョンのオブジェクトファイルを生成する必要があります。注意$(CXXFLAGS)には、3つのターゲットすべてに共通のフラグがあります。また、$(DEPS)を実行可能ファイルではなくオブジェクトファイルの依存として移動しました。

CXX = g++ 
SOURCES = random.cpp 
OBJECTS = $(SOURCES:.cpp=.o) 
EXECUTABLE = random-64bit 
DEBUG = -g -p -ggdb 
CXXFLAGS = -Wall -ansi -pedantic -W -pipe -O3 -std=gnu++0x -march=native \ 
    --fast-math -ftree-vectorize -ffast-math -D NDEBUG -D _DEBUG 
#CXXFLAGS+=$(DEBUG) 
DEPS = def_type.hpp \ 
    ls_regression.hpp \ 
    network.hpp \ 
    statistics.hpp \ 
    knot.hpp \ 
    nachbarn.hpp \ 
    $(SOURCES:.cpp=.hpp) \ 
    zufallszahlengenerator.hpp 
INCLUDES = -I/home/phymihsa/eigen/ -I/home/phymihsa/boost_1_48_0 
LIBPATH = -L/usr/local/lib64 
LDFLAGS = -lm 

all: random_none random_reg random_reg_time 

random_none: random_none.o 
    $(CXX) $(LDFLAGS) $(LIBPATH) random_none.o -o [email protected] 

random_reg: random_reg.o 
    $(CXX) $(LDFLAGS) $(LIBPATH) random_reg.o -o [email protected] 

random_reg_time: random_reg_time.o 
    $(CXX) $(LDFLAGS) $(LIBPATH) random_reg_time.o -o [email protected] 

random_none.o: random.cpp $(DEPS) 
    $(CXX) $(INCLUDES) $(CXXFLAGS) -c $< 

random_reg.o: random.cpp $(DEPS) 
    $(CXX) $(INCLUDES) $(CXXFLAGS) -D REG -c $< 

random_reg_time.o: random.cpp $(DEPS) 
    $(CXX) $(INCLUDES) $(CXXFLAGS) -D REG -D TIME -c $< 

.PHONY: clean 

clean: 
    rm -rf *.o random_none random_reg random_reg_time *~ p1 
0

各ファイルについて、コンパイルフラグバリアントごとに1つのターゲットを作成します。

2つのファイルfoo.ccとbar.ccに依存するプログラムがあるとします。デバッグ版とリリース版をコンパイルしたいとします。あなたはこのような何かやる:ここ

DEBUG = -g -Wall -D DEBUG 
RELEASE = ... 

foo_debug.o: foo.cc 
    g++ -o foo_debug.o -c foo.cc $(DEBUG) 
foo_release.o: foo.cc 
    g++ -o foo_release.o -c foo.cc $(RELEASE) 

# Same thing for bar ... 

main_debug: foo_debug.o bar_debug.o 
    g++ -o main_debug foo_debug.o bar_debug.o 

main_release: foo_release.o bar_release.o 
    g++ -o main_release foo_release.o bar_release.o 
+0

私のプログラムは2つのファイルに依存しません。私は2つのターゲットを作成したいと思います。 – Eagle

関連する問題