我的makefile文件中有一个食谱,该食谱依赖于几个目标文件。我希望将它们简单地链接起来,但是它们总是在重新编译。
我在Google上四处搜寻,发现了我不知道的信息(标有#)并进行了一些更改,但是问题仍然存在。
我被认为使make期望配方的名称是文件的名称,但我未能做到这一点。问题是我没有其他尝试解决此问题的方法。我将不胜感激
docker run -p 8500:8500 8501:8501 \
--mount type=bind,source=/path/to/models/first/,target=/models/first \
--mount type=bind,source=/path/to/models/second/,target=/models/second \
--mount type=bind,source=/path/to/config/config.conf,target=/config/config.conf\
-t tensorflow/serving --model_config_file=/config/config.conf
答案 0 :(得分:1)
此规则不会创建它承诺的文件:
%.o: $(SOURCE_DIR)/%.cpp $(CC) -c $< $(INCLUDE_DIR) -o $(OUTPUT_DIR)/$@
看到-o $(OUTPUT_DIR)/$@
吗?这指示编译器在$(OUTPUT_DIR)
中而不是在工作目录中创建文件。
如果您确实希望将目标文件放入$(OUTPUT_DIR)
,则需要确保您的规则表明:
$(OUTPUT_DIR)/%.o: $(SOURCE_DIR)/%.cpp
$(CC) -c $< $(INCLUDE_DIR) -o $@
或更佳的做法是像标准%.o: %.c
规则(其中将包含CFLAGS
等)
$(OUTPUT_DIR)/%.o: $(SOURCE_DIR)/%.cpp
$(COMPILE.c) $(OUTPUT_OPTION) $<
我注意到您的输入文件被命名为*.cpp
-通常,该约定适用于C ++文件(即使用$(COMPILE.cc)
进行编译,它将调用$(CXX)
而不是{{1} }。检查您是否没有混淆C和C ++源代码!