繁体   English   中英

MakeFile:强制目录下的所有文件都包含头文件

[英]MakeFile:Force all files under directory to include header

我当前的目录如下所示:

root
  |___src
  |     |
  |     |____Makefile
  |     |____a.cpp
  |     |____b.cpp
  |     |____c.h
  |     |____tests
  |              |
  |______________|____test.cpp

有没有办法从 makefile 强制测试目录下的所有文件包含 ch

你还没有回答我的任何一个问题,所以我不得不做一些猜测。

这可能是您正在寻找的:

%.o: %.cpp
    @$(CXX) -c $< -o $@

tests/%.o: tests/%.cpp
    @$(CXX) -include c.h -c $< -o $@

编辑:

如果你想在源文件的顶部插入#include "ch" ,你可以使用这个 sed 命令:

sed -i "" '1{h;s/.*/#include "c.h"/;G;}' filename

如果您想确保不会多次这样做,您可以这样做:

sed -i "" '1{h;s/.*/#include "c.h"/;G;s/\(.*\)\n\1$/\1/;}' filename

有几种不同的方法可以使用 makefile 执行此操作。 这是一种粗略但有效的方法:

tests/%.o: tests/%.cpp
    @sed -i "" '1{h;s/.*/#include "c.h"/;G;s/\(.*\)\n\1$/\1/;}' $<
    @$(CXX) -c $< -o $@

但是如果你只在每个源文件上运行 sed 一次,Make 会工作得更好。 这可以做到,但需要更仔细地考虑优先级。

gccclang支持-include file命令行选项。

gcc 文档

-包含文件

处理文件就像#include "file" 出现在主要源文件的第一行一样。 但是,搜索文件的第一个目录是预处理器的工作目录,而不是包含主源文件的目录。 如果在那里没有找到,它会像往常一样在 #include "..." 搜索链的其余部分中搜索。

其他编译器可能有类似的选项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM