如何使 GPR 接受同一项目中具有相同文件名的多个源?
How to make GPR accept multiple sources in the same project having the same file name?
我着手将一个OSS项目用C一段一段改写成Ada。首先停止用 GPR 替换构建系统。这样做时我偶然发现了一个问题:它不允许存储库中的多个源具有相同的名称:
duplicate source file name "slp_debug.h"
文件存在于两个不同的目录中;一个用于实施,一个用于测试(我估计是存根)。这应该没问题,因为预处理器将确定性地选择与包含它的源相关的源,或者根据包含目录的顺序。但 GPR 似乎不喜欢这个想法。
如何让GPR接受?
我试了一下 openslp-2.0.0,并设法制作了一个 GPR 来构建库,另一个 with
是第一个,用于构建测试 - 没有关于重复文件的抱怨。
两个项目文件都在顶层。
对于像 openslp
这样的项目很常见,configure
过程在顶层生成一个冗长的 config.h
,具有 #define HAVE_FOO 1
的卸载。
这是 'common' 项目文件 - 我认为那里可能还有一个可执行文件 (slptool
),它可能必须是一个单独的 GPR,因为它构建了一个库:
project Openslp is
for Languages use ("c");
for Source_Dirs use ("common", "libslp", "libslpattr");
for Excluded_Source_Files use
(
"slp_win32.c", -- not on Darwin! or Linux, ofc
"libslpattr_tiny.c" -- I think this must be an alternate version
);
for Library_Name use "slp";
for Library_Kind use "static";
for Library_Dir use "lib";
for Object_Dir use "obj-openslp";
for Create_Missing_Dirs use "true";
package Compiler is
for Switches ("c") use
(
"-DDARWIN",
"-DHAVE_CONFIG_H",
"-I" & project'Project_Dir, -- for config.h, created by configure
"-I" & project'Project_Dir & "/common",
"-I" & project'Project_Dir & "/libslp",
"-I" & project'Project_Dir & "/libslpattr",
"-DETCDIR=""" & project'Project_Dir & "/etc"""
);
end Compiler;
end Openslp;
这是 'test' 一个:
with "openslp";
project Openslp_Test is
for Languages use ("c");
for Source_Dirs use ("test/**");
for Object_Dir use "obj-openslp_test";
for Exec_Dir use "test/bin";
for Main use ("SLPFindAttrs.c"); -- etc, etc
for Create_Missing_Dirs use "true";
package Compiler is
for Switches ("c") use
("-I" & project'Project_Dir & "/test") -- for the local slp_debug.h
& Openslp.Compiler'Switches ("c");
end Compiler;
end Openslp_Test;
我着手将一个OSS项目用C一段一段改写成Ada。首先停止用 GPR 替换构建系统。这样做时我偶然发现了一个问题:它不允许存储库中的多个源具有相同的名称:
duplicate source file name "slp_debug.h"
文件存在于两个不同的目录中;一个用于实施,一个用于测试(我估计是存根)。这应该没问题,因为预处理器将确定性地选择与包含它的源相关的源,或者根据包含目录的顺序。但 GPR 似乎不喜欢这个想法。
如何让GPR接受?
我试了一下 openslp-2.0.0,并设法制作了一个 GPR 来构建库,另一个 with
是第一个,用于构建测试 - 没有关于重复文件的抱怨。
两个项目文件都在顶层。
对于像 openslp
这样的项目很常见,configure
过程在顶层生成一个冗长的 config.h
,具有 #define HAVE_FOO 1
的卸载。
这是 'common' 项目文件 - 我认为那里可能还有一个可执行文件 (slptool
),它可能必须是一个单独的 GPR,因为它构建了一个库:
project Openslp is
for Languages use ("c");
for Source_Dirs use ("common", "libslp", "libslpattr");
for Excluded_Source_Files use
(
"slp_win32.c", -- not on Darwin! or Linux, ofc
"libslpattr_tiny.c" -- I think this must be an alternate version
);
for Library_Name use "slp";
for Library_Kind use "static";
for Library_Dir use "lib";
for Object_Dir use "obj-openslp";
for Create_Missing_Dirs use "true";
package Compiler is
for Switches ("c") use
(
"-DDARWIN",
"-DHAVE_CONFIG_H",
"-I" & project'Project_Dir, -- for config.h, created by configure
"-I" & project'Project_Dir & "/common",
"-I" & project'Project_Dir & "/libslp",
"-I" & project'Project_Dir & "/libslpattr",
"-DETCDIR=""" & project'Project_Dir & "/etc"""
);
end Compiler;
end Openslp;
这是 'test' 一个:
with "openslp";
project Openslp_Test is
for Languages use ("c");
for Source_Dirs use ("test/**");
for Object_Dir use "obj-openslp_test";
for Exec_Dir use "test/bin";
for Main use ("SLPFindAttrs.c"); -- etc, etc
for Create_Missing_Dirs use "true";
package Compiler is
for Switches ("c") use
("-I" & project'Project_Dir & "/test") -- for the local slp_debug.h
& Openslp.Compiler'Switches ("c");
end Compiler;
end Openslp_Test;