el.*_*ado 21

在bash中:

HEADER=all_headers.h
echo "#ifndef __ALL_HEADERS__" > $HEADER
echo "#define __ALL_HEADERS__" >> $HEADER
for file in dir/*.h
do
    echo "#include <$file>" >> $HEADER
done
echo "#endif" >> $HEADER
Run Code Online (Sandbox Code Playgroud)

  • @ArmanBimatov 抱歉,necro,但是 Batch 等效项基本上是相同的,并且 Powershell 使用相同的想法。只需谷歌“迭代目录 cmd 中的所有文件”(或者最后的 Powershell,如果你想要的话)并用它替换 `for` 循环。 (2认同)

Bjö*_*lex 11

实现这一目标的一种方法是编写一个包含所需标题的便捷标题.请记住,包含您不使用的标头可能会不必要地增加编译时间.


Jor*_*wis 8

如果不事先运行脚本,则不能生成所有#include语句.

预处理器每个#include语句只能处理一个文件,因此对于希望包含在预处理中的每个文件,它都需要一个实际的#include.


ezp*_*zpz 7

看看Boost如何做到这一点,比如说utility.hpp.

$ cat /usr/include/boost/utility.hpp
//  Boost utility.hpp header file  -------------------------------------------//
<snip>
#ifndef BOOST_UTILITY_HPP
#define BOOST_UTILITY_HPP

#include <boost/utility/addressof.hpp>
#include <boost/utility/base_from_member.hpp>
#include <boost/utility/enable_if.hpp>
#include <boost/checked_delete.hpp>
#include <boost/next_prior.hpp>
#include <boost/noncopyable.hpp>

#endif  // BOOST_UTILITY_HPP
Run Code Online (Sandbox Code Playgroud)

现在你可以使用了#include <boost/utility.hpp>.

  • @user137790:Java 提供这种机制的事实确实很方便。但是`C++` **永远**不会选择方便而不是效率;而这样做恰恰是**不**高效的。它将允许您以更长的编译时间为代价来节省一些击键。从长远来看,您认为哪个支付更多? (2认同)