Как можно достигнуть того, что следующий код пытается сделать?
#include "dir/*"
В 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
Посмотрите, как 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
Теперь вы можете просто использовать #include
.
Один из способов добиться этого - написать удобный заголовок, включающий все нужные заголовки. Имейте в виду, что включение заголовков, которые вы не будете использовать, может излишне увеличить время компиляции.
Вы не можете, не запустив предварительно скрипт, который генерирует все #include утверждения.
Препроцессор может обрабатывать только один файл для каждого оператора #include, поэтому он требует фактического #include для каждого файла, который вы хотите включить в препроцессирование.