Makefile 不同版本的不同文件和标志集

Makefile 不同版本的不同文件和标志集,makefile,gnu-make,Makefile,Gnu Make,在Linux中为项目使用GNU make。我希望有一个测试和一个prod构建,并尝试用条件指令实现它。测试生成与产品生成具有不同的源文件和标志等 首先,我发现if块只有在跟踪目标时才起作用 # More variable definition skipped. SRCS := some source files CXXFLAGS := some complile flags test: ${myBinary} ifeq (${BUILD}, UNIT) @echo BUILD ==

在Linux中为项目使用GNU make。我希望有一个测试和一个prod构建,并尝试用条件指令实现它。测试生成与产品生成具有不同的源文件和标志等

首先,我发现if块只有在跟踪目标时才起作用

# More variable definition skipped.

SRCS := some source files
CXXFLAGS := some complile flags

test: ${myBinary}
ifeq (${BUILD}, UNIT)
    @echo BUILD == ${BUILD}
  SRCS += ${TEST_SRCS}
  CXXFLAGS += some test flags
endif
我使用这种方式,以便以后可以使用模式来构建.o文件,而不是列出两个不同构建的所有源文件。基本上,我试图找到一种使用模式构建.o文件的方法,但对于测试/产品构建,仍然有不同的文件、标志等

${BUILD_DIR}/%.o : %.cpp
    ${CXX} -c ${CXXFLAGS} ${INCS} $< -o $@
如何修复它以实现我的目标

关于组织makefile以实现目标的其他建议也是最受欢迎的

编辑:

  • 生成的两个可执行文件可以有不同的名称,但可以位于同一位置
  • 我想把对象文件放在${BUILD_DIR}中,以将它们与源文件分开
  • 取消识别SRCS行后,“未找到命令”错误消失

您试图同时解决两个问题,而您提供给我们的关于您要做什么的信息太少,因此我们建议的任何解决方案都可能不是您想要的。是否希望
test
prod
生成具有不同名称的可执行文件?你想让他们把可执行文件放在不同的地方吗?对象文件呢?
SRCS:Command not found
是shell的错误。您已经用一个选项卡缩进了
SRCS+=${TEST\u SRCS}
,这样make认为当您要求shell构建
TEST
时,它是一个要传递给shell的命令行。
make: SRCS: Command not found
make: *** [test] Error 127