[英]How to make */* for many folders of self-contained cpp files?
我正在玩这个 OpenCV 2 Cookbook 中的一些教程代码。 该代码没有附带任何 Makefile,我想创建一个 Makefile 来制作代码库中的所有文件。 我的计划是通过分析编译所有文件,然后制作一个脚本来运行所有可执行文件并收集 gprof 结果。 然后,我可以直观地了解各种 OpenCV 函数的计算时间。
代码库的排列如下: tutorial_code/Chapter[1-10]/*.cpp
每个.cpp
文件都是自给自足的,可以在不链接到此代码库中的其他模块的情况下进行编译。 (不过,有一些小型的仅头文件库。)
以下是我坚持的几件事:
$(EXEC)
代表一个文件,它是大部分构建工作的结晶。 但是,就我而言,我想为每个.cpp
文件创建一个单独的$(EXEC)
。 我想我已经接近正确了,但到目前为止我的 Makefile 只生成*.o
而不是*.out
SOURCES = $(wildcard *.cpp)
是一种在当前目录中“收集”一组 cpp 文件的方法。 SOURCES = $(wildcard */*.cpp)
将向下钻取并获取子目录中的所有.cpp
文件是有意义的。 不过,它似乎不起作用。 从本教程开始,我设置了一个实现建议功能的 Makefile。 它不太工作...... $(wildcard */*.cpp)
似乎没有深入到目录中,我不知道如何做$<
和$@
类的事情来引用basefilename.o
并创建basefilename.out
。
CC = g++
CC_FLAGS = -w `pkg-config opencv --cflags`
LINK = g++
LINKOPTS = -pg `pkg-config opencv --libs`
SOURCES = $(wildcard */*.cpp)
OBJECTS = $(SOURCES:.cpp=.o)
EXEC = $(SOURCES:.cpp=.out)
%.out: %.o
$(LINK) $< $(LINKOPTS) -o $@
%.o: %.cpp
$(CC) -c $(CC_FLAGS) $< -o $@
clean:
rm -f $(EXEC) $(OBJECTS)
tutorial_code/Chapter[1-10]
目录并为每个目录创建一个 Makefile。 然后,我会在脚本中创建另一个函数来在每个目录中调用 Make 一次。 不过,做一个宏大的 Makefile 的想法听起来更有趣。 编辑:如果我使用SOURCES = $(wildcard *.cpp)
并将 Makefile 放在cpp
文件所在的同一目录中,这确实有效。 但是,我仍在尝试弄清楚如何让$(wildcard */*.cpp)
深入到子目录中。
编辑 2:上面显示的 Makefile 现在可以正常工作。 要查看早期版本,请随意滚动编辑历史记录。
您可以编写一个wildcard
版本,该版本仅使用make
函数递归地工作到任何深度:
find-recursive = \
$(wildcard $1/$2) \
$(foreach f,$(wildcard $1/*/.),\
$(call find-recursive,$(patsubst %/.,%,$f),$2))
SOURCES = $(call find-recursive,.,*.cpp)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.