gpt4 book ai didi

c++ - 如何为许多独立的cpp文件文件夹制作*/*?

转载 作者:搜寻专家 更新时间:2023-10-31 01:51:40 24 4
gpt4 key购买 nike

我正在研究 this OpenCV 2 Cookbook 中的一些教程代码.该代码不附带任何 Makefile,我想创建一个 Makefile,它可以生成代码库中的所有文件。我的计划是通过分析编译所有文件,然后制作一个脚本来运行所有可执行文件并收集 gprof 结果。然后,我可以对各种 OpenCV 函数的计算时间有一些直觉。

代码库是这样排列的:tutorial_code/Chapter[1-10]/*.cpp每个.cpp文件是自给自足的,可以在不链接此代码库中的其他模块的情况下进行编译。 (不过,有一些小型的仅包含 header 的库。)

以下是我坚持的几件事:

  • 通常,$(EXEC) Makefile 中的 代表一个文件,该文件是大部分构建工作的结晶。但是,就我而言,我想创建一个单独的 $(EXEC)对于每个 .cpp文件。我想我已经接近做对了,但到目前为止我的 Makefile 只生成了 *.o但不是 *.out
  • 我明白 SOURCES = $(wildcard *.cpp)是一种在当前目录中“收集”cpp 文件集的方法。 SOURCES = $(wildcard */*.cpp) 是有道理的将向下钻取并获取所有 .cpp子目录中的文件。不过,它似乎不起作用。

this tutorial开始,我设置了一个 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)

  • 我对 Makefile 和 OpenCV 相当熟悉,通过在 Makefile 中手动编写依赖项列表、对象等来编译我自己的项目,我没有遇到任何问题。但是,就手头的事情而言,如果无需太多用户干预即可自动生成所有内容,那就太棒了。
  • 请随时发表评论、发送电子邮件或给我发消息,索取我正在尝试编译的代码库的拷贝。
  • 我还考虑过编写一个脚本来遍历 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)

关于c++ - 如何为许多独立的cpp文件文件夹制作*/*?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13620650/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com