包括目录中的所有文件?

时间:2010-06-17 12:29:49

标签: c++ directory include c-preprocessor

如何实现以下代码尝试的目的?

#include "dir/*"

4 个答案:

答案 0 :(得分:22)

在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

答案 1 :(得分:11)

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

答案 2 :(得分:8)

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

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

答案 3 :(得分:6)

查看Boostutility.hpp

的影响。{{3}}
$ 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

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