включить все файлы в каталог? - PullRequest
22 голосов
/ 17 июня 2010

Как можно добиться того, что пытается сделать следующий код?

#include "dir/*"

Ответы [ 4 ]

22 голосов
/ 17 июня 2010

В Баш:

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
11 голосов
/ 17 июня 2010

Один из способов добиться этого - написать удобный заголовок, который включает все нужные заголовки. Имейте в виду, что включение заголовков, которые вы не будете использовать, может излишне увеличить время компиляции.

8 голосов
/ 17 июня 2010

Невозможно без предварительного запуска сценария, который генерирует все операторы #include.

Препроцессор может обрабатывать только один файл на оператор #include, поэтому он требует фактического #include для каждого файла, который выхотите быть включенным в предварительную обработку.

7 голосов
/ 17 июня 2010

Посмотрите, как 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 <boost/utility.hpp>.

...