web-dev-qa-db-fra.com

inclure tous les fichiers dans un répertoire?

Comment réaliser ce que le code suivant essaie de faire?

#include "dir/*"
25
Karl Glaser

En 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

Une façon d'y parvenir est d'écrire un en-tête pratique qui inclut tous les en-têtes que vous souhaitez. Gardez à l'esprit que l'inclusion d'en-têtes que vous n'utiliserez pas peut augmenter inutilement le temps de compilation.

12
Björn Pollex

Vous ne pouvez pas, sans exécuter au préalable un script qui génère toutes les instructions #include.

Le préprocesseur ne peut gérer qu'un seul fichier par instruction #include, il nécessite donc une réelle #include pour chaque fichier que vous souhaitez inclure dans le prétraitement.

11
Jordan Lewis

Regardez comment Boost fait cela pour, disons, 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

Maintenant, vous pouvez simplement utiliser #include <boost/utility.hpp>.

7
ezpz