C++ g++-我包括所有带有头文件的子目录

C++ g++-我包括所有带有头文件的子目录,c++,gcc,C++,Gcc,我刚刚偶然发现了使用linux find命令编译所有.cpp文件,包括子目录中的文件: g++-g$(查找RootFolderName-type f-iregex“*\.cpp”)-o OutputName 这样做的问题是,所有文件都需要在执行#include时写出它们的相对路径,这样才能工作。您可以使用-I标记添加所需的目录: g++-g$(查找RootFolderName-type f-iregex“*\.cpp”)-o OutputName-I./somePath 但如果有多个子目录,这仍

我刚刚偶然发现了使用linux find命令编译所有.cpp文件,包括子目录中的文件:

g++-g$(查找RootFolderName-type f-iregex“*\.cpp”)-o OutputName

这样做的问题是,所有文件都需要在执行#include时写出它们的相对路径,这样才能工作。您可以使用
-I
标记添加所需的目录:

g++-g$(查找RootFolderName-type f-iregex“*\.cpp”)-o OutputName-I./somePath

但如果有多个子目录,这仍然是一个相当麻烦的问题。是否可以将find与其他正则表达式一起使用以包含所有子目录

是否可以将find与其他正则表达式一起使用以包含所有子目录

是的,有些项目,如mbed和arduino,似乎包含所有可能的目录以包含路径。在shell中,假设没有空格,您可以:

find . -type f -iname '*.h' -printf "-I%h\n" | sort -u
这是路径中容易出现空白的错误。使用时:

command $(stuff)

文件名中的空格将出现问题。研究其他方法以及如何处理shell中的空白。更好的是,不要手动编写这些东西,不要重新发明轮子,不要转向构建系统,比如
cmake

“问题是所有文件都需要写出它们的相对路径…”这通常是有意的。尽管您可以将
make
find
命令结合使用,并在
Makefile
中使用一些字符串替换来实现所需的功能。您要求这样做的事实表明您的标题组织得不好,您没有使用正确的构建项目,或者您试图以一种绝对不推荐的方式在源代码中保存一些字符。除非你只是出于好奇而问这个问题,否则我建议你处理潜在问题,而不是使用这种解决方法。如果你在Makefile、CMakeLists.txt或其他配置中明确列出每个文件,事情会好得多。使用
find
或其他通配符是一个超级错误。@fabian我只是在寻找一个快速的oneliner来编译我的项目,而它还处于非常早期的阶段,如果我开始一个更严肃的项目,肯定会使用Makefile。是的,我知道我可以转向类似于
Makefile
的项目,但我想四处寻找解决办法,因为这是一个学校项目,一周后我再也不会接触它了,我不想涉足复杂的事情。答案正是我一直在寻找的,而且现在还在工作。非常感谢。