web-dev-qa-db-ja.com

ディレクトリ内のすべてのファイルを含めますか?

次のコードが実行しようとしていることをどのように達成できますか?

#include "dir/*"
25
Karl Glaser

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
22
el.pescado

これを実現する1つの方法は、必要なすべてのヘッダーを含む便利なヘッダーを記述することです。使用しないヘッダーを含めると、コンパイル時間が不必要に長くなる可能性があることに注意してください。

12
Björn Pollex

すべての#includeステートメントを生成するスクリプトを事前に実行しなければ、それはできません。

プリプロセッサーは#includeステートメントごとに1つのファイルしか処理できないため、前処理に含めたいファイルごとに実際の#includeが必要です。

11
Jordan Lewis

Boostutility.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

これで#include <boost/utility.hpp>を使用できます。

7
ezpz