【问题标题】:makefile multiple main with wildcard使用通配符生成多个主文件
【发布时间】:2017-09-05 14:54:58
【问题描述】:

我想编译许多在包含许多电源的文件夹中自动找到的电源。

SOURCES       = $(wildcard src/shared/*.cc)
OBJECTS       = $(SOURCES:%.cc/%.o)
MAINS_SOURCES = $(wildcard src/mains/*.cc)
MAINS_OBJECTS = $(MAINS_SOURCES:%.cc=%.o)
PROGRAMS_NAME = $(MAINS_SOURCES:src/mains/%.cc=%)

现在我有这段代码,当然,它不能与多个 main 一起使用。

$(PROGRAMS_NAME):$(OBJECTS) $(MAINS_OBJECTS)
    $(CXX) $(LIBS) $(OBJECTS) $(MAINS_OBJECTS) -o $@

我怎样才能正确地为每个 main 拆分 $(MAINS_OBJECTS)

谢谢!

【问题讨论】:

  • 您能举个例子说明您正在尝试做什么吗?

标签: makefile wildcard


【解决方案1】:

对于这种情况static pattern rules 经常派上用场:

SOURCES       = $(wildcard src/shared/*.cc)
OBJECTS       = $(SOURCES:%.cc/%.o)
MAINS_SOURCES = $(wildcard src/mains/*.cc)
MAINS_OBJECTS = $(MAINS_SOURCES:%.cc=%.o)
PROGRAMS_NAME = $(MAINS_SOURCES:src/mains/%.cc=%)

$(OBJECTS) $(MAINS_OBJECTS): %.o: %.cc
    $(CXX) $(CXXFLAGS) -c $< -o $@

$(PROGRAM_NAME): %: src/mains/%.o $(OBJECTS)
    $(CXX) $(LIBS) $^ -o $@

【讨论】:

  • OBJECTS_CXX 是生成可执行文件所需的目标文件。
  • 这是一个糟糕的名称选择,因为我正在测试东西,我使用 SOURCES_CXXOBJECTS_CXX,我应该使用 MAIN_SOURCES_CXXMAIN_OBJECTS_CXX。对困惑感到抱歉。 MAIN_SOURCES_CXXSOURCES_CXX 有一个空交叉点。
  • 完美!您可以随时删除这些 cmets;)谢谢!
猜你喜欢
  • 2018-11-14
  • 2018-02-11
  • 2012-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多