生成文件自动 SRC 文件检测和依赖项生成
makefile automatic src file detection and dependency generation
我的c ++项目有以下设置:
在 src 文件夹中,有 *.cpp 和相应的 *.h 文件和在 obj 文件夹中,我想拥有我的 .o 文件。
到目前为止,编译和链接不是问题。但是现在我有太多的.cpp和.h文件,无法手动将它们放入Makefile中。所以我决定在 makefile 中写这个小指令:
collect_sources:
@echo "collecting source files";
@echo "SRCS = \" > sources;
@for file in ./src/*.cpp;
do
echo "$$file \" >> sources;
done
我也做
-include sources
在生成文件的开头
生成的文件看起来sources
不错,尽管最后一行有一个我不喜欢的反斜杠。但这也应该是有害的。
我现在还需要自动建立依赖项。在我的最新版本中,我将 *.cpp 文件定义为直接在 Makefile 中SRCS
,以下代码很好:
$(SRCDIR)/%.cpp:
@$(CXX) $(DEPFLAGS) -MT
"$(subst $(SRCDIR),$(OBJDIR),$(subst $(EXT_SRC),$(EXT_OBJ),$$file))"
$(addprefix ,$$file) >> $(DEP);
clear_dependencies:
echo "" > $(DEP);
depend: clear_dependencies $(SRCS)
但是包含sources
-file,它永远不会到达上层代码块。
以下是在生成文件顶部定义的常量:
CXX = g++
CXXFLAGS = -Wall
-Wextra
-Wuninitialized
-Wmissing-declarations
-pedantic
-O3
-p -g -pg
LDFLAGS = -p -g -pg
DEPFLAGS = -MM
SRCDIR = ./src
OBJDIR = ./obj
TARGET = ./bin/my_funky_function_which_is_not_the_real_name
-include sources
OBJSTMP = $(SRCS:.cpp=.o)
OBJS = $(OBJSTMP:$(SRCDIR)=$(OBJDIR))
DEP = depend.main
EXT_SRC = .cpp
EXT_OBJ = .o
我错过了什么?我的方法有效/可行吗?
好吧,你要求它。
1:你的collect_sources:... include sources
是光荣的鲁布·戈德堡黑客。只需这样做:
SRCS = $(wildcard ./src/*.cpp)
如果你想通过肉眼确认它,你可以这样做:
$(info $(SRCS))
阿拉伯数字:
clear_dependencies:
echo "" > $(DEP);
只是为了美观,让我们解决这个问题。
clear_dependencies:
$(RM) $(DEP);
3:
$(SRCDIR)/%.cpp:
@$(CXX) $(DEPFLAGS) -MT
"$(subst $(SRCDIR),$(OBJDIR),$(subst $(EXT_SRC),$(EXT_OBJ),$$file))"
$(addprefix ,$$file) >> $(DEP);
这将需要一些工作。首先是直接的问题:目标是存在的真实文件,并且规则没有先决条件。因此,该规则将不会运行(我不知道为什么它在以前的版本中对您有用,也许还有其他不同之处(。作为临时修复,我建议我们切换到静态模式规则和 PHONY 目标:
.PHONY:$(SRCS)
$(SRCS) : $(SRCDIR)/%.cpp:
@$(CXX) $(DEPFLAGS) -MT
...
看看这一切是否有效,那么我们就可以解决大问题。
相关文章:
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- node-gyp 的先有鸡还是先有蛋的问题:指向依赖项中的头文件
- 提示存档文件中的动态库依赖项
- 如何在头文件中声明类模板(由于循环依赖关系)
- 对在不同二进制文件中创建的对象文件的依赖关系
- 在链接可执行文件之前查找静态库未解析的依赖项
- 在位置上运行具有依赖项的.exe文件
- 在生成文件中添加源文件并更新依赖项
- 在 Ubuntu 18.04 上,我编译的 cpp 可执行文件找不到 VTK7 依赖项
- cmake:构建依赖于非源文件.Qt帮助生成
- 更改 Cmake 文件以从源代码编译依赖项,而不是使用 FIND_PACKAGE
- 正确的生成文件依赖项列表 (C++)
- 我可以在我的 cmake 代码中手动使用 CMake 的 cpp 文件依赖项扫描程序吗?
- 将所有文件依赖于特定目录的依赖
- g++/c++生成文件依赖项以忽略boost标头
- 生成文件 - 依赖项生成
- 用于查找可执行文件依赖项的命令
- 使用 cmake 处理头文件依赖项
- 库文件依赖项冲突
- 生成文件模式规则:循环生成文件.o < - 删除生成文件依赖项