我目前正在尝试使用sfml-framework来改善我的c ++项目的生成文件。我的项目的文件夹结构当前如下所示:
我当前的Makefile:
CC = g++ -g
SRC = Src/Source/
BIN = Bin/
INC = -I Lib/SFML/include/ -I Src/Header/
LIB = -L Lib/SFML/lib/ -lsfml-graphics-d -lsfml-window-d -lsfml-system-d
EXE = Test
SOURCEFILES = $(SRC)Main.cpp $(SRC)Menu.cpp $(SRC)Button.cpp
OBJ = $(SOURCEFILES:.cpp=.o)
all: $(SOURCEFILES) $(EXE)
$(EXE) : $(OBJ)
$(CC) -o $(BIN)$(EXE).exe $(OBJ) $(LIB)
.cpp.o:
$(CC) -c $< $(INC) -o $@
此makefile可以正常工作,但是我有一些要改进的地方,但是无法正常工作。
当前需要手动将所有cpp文件添加到源文件列表中。由于该项目最有可能在文件数量方面快速增长,并且我有点想将源文件拆分到不同的子目录中,所以这很快就会变得一团糟。我试图用$(通配符Src / Source / *。cpp)将所有cpp文件保存在目录中,而不是单独列出它们,但是它甚至无法执行makefile。我在那儿想念什么?
使用我当前的makefile,所有.o文件都与.cpp文件放置在同一位置,这也是我真正不想要的东西。有没有办法将所有.o文件输出到一个额外的\ obj \目录中,然后从那里将其链接到.exe?
由于这是我第一次编写makefile,如果我的方法有一些一般性的改进,那么任何建议也应得到赞赏。
答案 0 :(得分:1)
我很惊讶通配符对您不起作用,您可以共享任何错误代码?
通常我会这样写我的SRCS和OBJS变量:
SRCS = $(wildcard src/*.cpp) \
$(wildcard test/*.cpp)
OBJS = $(patsubst %.cpp,$(BINDIR)/%.o,$(SRCS))
要将目标文件构建到另一个目录中,您可以编写如下内容:
$(BINDIR)/%.o: %.cpp
$(CXX) $(CXXFLAGS) $(INCLUDES) -c $< -o $@
答案 1 :(得分:0)
from keras.layers import Input, Dense, TimeDistributed
from keras.models import Sequential, Model
N = None # Use fixed value if you do not want variable input size
K = 20
def small_model():
inputs = Input(shape=(K,))
# Define the small model
# Here it is just a single dense layer
outputs = Dense(K, activation='relu')(inputs)
return Model(inputs=inputs, outputs=outputs)
def large_model():
inputs = Input(shape=(N, K))
# Define the large model
# Just a single neuron here
outputs = Dense(1, activation='relu')(inputs)
return Model(inputs=inputs, outputs=outputs)
def combined_model():
inputs = Input(shape=(N, K))
# The TimeDistributed layer applies the given model
# to every input across dimension 1 (N)
small_model_out = TimeDistributed(small_model())(inputs)
# Apply large model
outputs = large_model()(small_model_out)
return Model(inputs=inputs, outputs=outputs)
model = combined_model()
model.compile(loss='mean_squared_error', optimizer='sgd')
model.summary()
应该可以工作:
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_1 (InputLayer) (None, None, 20) 0
_________________________________________________________________
time_distributed_1 (TimeDist (None, None, 20) 420
_________________________________________________________________
model_2 (Model) (None, None, 1) 21
=================================================================
Total params: 441
Trainable params: 441
Non-trainable params: 0
_________________________________________________________________
但是,如果您计划将源文件放在wildcard
的各个子目录中,它将不能很好地工作。多亏了SOURCEFILES = $(wildcard $(SRC)/*.cpp)
make函数,使用Src/Source/
实用程序。是的,您可以将所有目标文件存储在单独的目录中:
find
请注意,我还修改了shell
的定义,以使相应的规则是真实的文件到文件的生成规则,并使用了CC = g++ -g
SRC = Src/Source/
OBJ = Obj/
BIN = Bin/
INC = -I Lib/SFML/include/ -I Src/Header/
LIB = -L Lib/SFML/lib/ -lsfml-graphics-d -lsfml-window-d -lsfml-system-d
EXE = $(BIN)Test.exe
SOURCEFILES = $(shell find $(SRC) -type f -name *.cpp)
OBJECTFILES = $(patsubst $(SRC)%.cpp,$(OBJ)%.o,$(SOURCEFILES))
all: $(SOURCEFILES) $(EXE)
$(EXE): $(OBJECTFILE)
$(CC) -o $@ $^ $(LIB)
$(OBJ)%.o: $(SRC)%.cpp
mkdir -p $(dir $@)
$(CC) -c $< $(INC) -o $@
和EXE
自动变量。