我正在使用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不应该是已安装标头的一部分。必须有一些方法来实现这个或必须有一些原因,我正在尝试做的是不可取的。
感谢您的帮助!
答案 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)