使用scons以编程方式安装标头和从属标头

时间:2011-09-28 01:26:39

标签: header dependencies install scons

我正在使用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 个答案:

答案 0 :(得分:1)

好吧,我找到了答案。这是我正在谈论的代码片段:

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)