C++ 为调试/发布配置投影makefile

C++ 为调试/发布配置投影makefile,c++,makefile,C++,Makefile,需要您帮助投影生成文件。所以,我所拥有的和我想要得到的。我需要构建两个可执行文件。源代码是常见的。预处理器宏控制两个EXE的差异,例如,在main.cpp中: #if PROJECT_TYPE==FTP std::cout << "FTP" << std::endl; #else std::cout << "SFTP" << std::endl; #endif 此外,我还希望使用自己的CXXFLAGS和输出目录创建调试/发布构建目标,以便获得以下

需要您帮助投影生成文件。所以,我所拥有的和我想要得到的。我需要构建两个可执行文件。源代码是常见的。预处理器宏控制两个EXE的差异,例如,在main.cpp中:

#if PROJECT_TYPE==FTP
std::cout << "FTP" << std::endl;
#else
std::cout << "SFTP" << std::endl;
#endif
此外,我还希望使用自己的CXXFLAGS和输出目录创建调试/发布构建目标,以便获得以下结果:

TARGETS= ftp_auto_backup sftp_auto_backup

我想使用隐式规则进行编译,如下所示:

%.o: %.cpp
$(CXX) -c $(CXXFLAGS) $< -o $(O_DIR)/$@
%.o:%.cpp
$(CXX)-c$(CXXFLAGS)$<-o$(o\U DIR)/$@
但是如何为每个目标int$(TARGETS)和每个构建配置指定单独的O_DIR呢?我的主要问题在于这一步。我现在可以粘贴我所有的makefile,但它仍然不能构建任何东西。以防万一:


提前谢谢你们,伙计们

有很多方法可以做到这一点。最简单的方法似乎是通过递归Make。(我并不认为这总是一个坏主意。)

现在来制作可执行文件,给定
VERSION
。我们可以使用另一层递归来处理这两种项目类型,但我们可以不使用它(我不会详细介绍预处理器宏和编译器/链接器标志,因为您似乎已经知道了它们——如果您愿意,我将详细说明它们):

OBJ_LIST=foo.o bar.o baz.o
ftp\自动\备份:项目\类型=ftp
ftp_自动_备份:$(addprefix$(版本)/ftp_自动_备份/obj/,$(obj_列表))
sftp\u自动\u备份:项目类型=sftp
sftp_自动_备份:$(addprefix$(版本)/sftp_自动_备份/obj/,$(obj_列表))
ftp_自动_备份sftp_自动_备份:
@g++-Wall$^-o$@带有各种标志
$(版本)/ftp\自动\备份/obj/%.o:%.cc
@g++-Wall-c$<-o$@带有各种标志
$(版本)/sftp\u自动备份/obj/%.o:%.cc
@g++-Wall-c$<-o$@带有各种标志

是否要通过一次调用生成两个版本?或者,能够构建任何一个版本就足够了吗?@Beta,如果对每个版本分别调用make就可以了:make&&make debug。非常感谢!!现在一切都很完美!我非常感谢你的帮助!
%.o: %.cpp
$(CXX) -c $(CXXFLAGS) $< -o $(O_DIR)/$@
.PHONY: release
release: VERSION=Release

.PHONY: debug
debug: VERSION=Debug

release debug:
        @$(MAKE) -S ftp_auto_backup sftp_auto_backup VERSION=$(VERSION)
OBJ_LIST = foo.o bar.o baz.o

ftp_auto_backup: PROJECT_TYPE=FTP
ftp_auto_backup: $(addprefix $(VERSION)/ftp_auto_backup/obj/, $(OBJ_LIST))

sftp_auto_backup: PROJECT_TYPE=SFTP
sftp_auto_backup: $(addprefix $(VERSION)/sftp_auto_backup/obj/, $(OBJ_LIST))

ftp_auto_backup sftp_auto_backup:
        @g++ -Wall $^ -o $@ with various flags

$(VERSION)/ftp_auto_backup/obj/%.o: %.cc
        @g++ -Wall -c $< -o $@ with various flags

$(VERSION)/sftp_auto_backup/obj/%.o: %.cc
        @g++ -Wall -c $< -o $@ with various flags