区分私有和公共头的C库布局的规范方法

区分私有和公共头的C库布局的规范方法,c,scons,C,Scons,我正在尝试写一个C库。在其他编程语言中学习过,在编写库时区分私有API和公共API是很重要的,因此我想在这个库中区分私有API和公共API。现在我正在为项目目录寻找一个好的(和/或规范的)布局 我想,这种情况看起来是这样的: ./include/mylib/testing.h ./SConstruct ./src/SConscript ./src/testing.c ./test/SConscript ./test/test_testing.c 然后,include/..可以打包为一个myli

我正在尝试写一个C库。在其他编程语言中学习过,在编写库时区分私有API和公共API是很重要的,因此我想在这个库中区分私有API和公共API。现在我正在为项目目录寻找一个好的(和/或规范的)布局

我想,这种情况看起来是这样的:

./include/mylib/testing.h
./SConstruct
./src/SConscript
./src/testing.c
./test/SConscript
./test/test_testing.c
然后,
include/..
可以打包为一个
mylib dev
包,供应用程序链接(即安装在
/usr/local/include
中)。这听起来合理吗

作为参考,我使用以下scons配置:

from os.path import join

include = Dir('include')
cflags = ['-Wall', '-std=c11']

common_env = Environment(CPPPATH=include, CFLAGS=cflags)

release_env = common_env.Clone(CPPDEFINES=['RELEASE'])

release_env.VariantDir('build/release/src', 'src', duplicate=0)
release_env.VariantDir('build/release/test', 'test', duplicate=0)

debug_env = common_env.Clone(CPPDEFINES=['DEBUG'], CFLAGS=['-g'])

debug_env.VariantDir('build/debug/src', 'src', duplicate=0)
debug_env.VariantDir('build/debug/test', 'test', duplicate=0)

for mode, env in dict(release=release_env, debug=debug_env).iteritems():
    modeDir = join('build', mode)
    library = env.SConscript(join(modeDir, 'src/SConscript'), {'env': env})
    env.SConscript(join(modeDir, 'test/SConscript'), {'env': env})
src/SConscript

Import('env')

env = env.Clone()
lib = env.SharedLibrary('yocto', source=['testing.c'])

我希望有两个目录中的标题,一个目录中的公共目录和另一个目录中的私有目录,可能与源*.c文件混合。请不要直接使用
VariantDir
,而是查看
variant\u dir
参数到
SConscript
调用,如第15章所述。分离源目录和构建目录。随着时间的推移,它会减少你的头痛我按照@chux所描述的操作,将公共头放在include文件夹中,将私有头放在src文件夹中。这对我们来说效果很好。我希望有两个目录中的标题,一个目录中的公共目录和另一个目录中的私有目录,可能与源*.c文件混合。请不要直接使用
VariantDir
,而是查看
variant\u dir
调用的
variant\u dir
参数,如中所述,第15章。分离源目录和构建目录。随着时间的推移,它会减少你的头痛我按照@chux所描述的操作,将公共头放在include文件夹中,将私有头放在src文件夹中。这对我们很有效。