программно устанавливать заголовки и зависимые заголовки, используя scons - PullRequest
0 голосов
/ 28 сентября 2011

Я использую scons в качестве моей системы сборки, и я хотел бы также установить заголовки разработки моего проекта, используя scons. Я хотел бы избежать ведения списка всех необходимых заголовков и их включаемых зависимостей и вместо этого использовать встроенную магию парсинга зависимостей scons, чтобы предоставить этот список для меня.

В качестве примера у меня есть 2 заголовка, которые я хочу установить явно: Foo1.h и Foo2.h:

/* Foo1.h */
#ifndef FOO1_H_
#define FOO1_H_

#include "Bar.h"
#include <somelibrary.h>

/* header contents */

#endif /* FOO1_H_ */

и

/* Foo2.h */
#ifndef FOO2_H_
#define FOO2_H_

/* header contents */

#endif /* FOO2_H_ */

Поскольку Foo1.h требуется Bar.h, я хочу, чтобы он тоже устанавливался автоматически. somelibrary.h не должен быть частью установленных заголовков. Должен быть какой-то способ достичь этого или , должна быть какая-то причина, по которой я пытаюсь сделать, не рекомендуется.

Спасибо за любую помощь!

1 Ответ

1 голос
/ 02 января 2012

Ну, я разобрался с ответом. Вот фрагмент кода, который будет делать именно то, о чем я говорил:

def getDependentIncludes(environ, explicit_includes, search_path, depincludes):
    for inc in explicit_includes:
        if inc not in depincludes:
            depincludes.add(inc)
            incs = SCons.Defaults.CScan(inc, environ, search_path)
            getDependentIncludes(environ, incs, search_path, depincludes)
# create a set of all the headers
development_headers = set()
# call function, with development_headers storing the result
getDependentIncludes(env, 
                 external_facing_headers, 
                 include_dirs, development_headers)
# print the glorious results
names = map(lambda x : '"./' + os.path.relpath(str(x), Dir("#").abspath) + '"', development_headers)
names.sort()
print " ".join(names)
...