我开始用C来重写一个开放源码软件项目给Ada。第一步是用探地雷达取代建造系统。在这样做时,我偶然发现了一个问题:它不允许存储库中具有相同名称的多个源:
duplicate source file name "slp_debug.h"
该文件存在于两个不同的目录中;一个用于实现,另一个用于测试(我估计是存根)。这应该是很好的,因为预处理器将决定性地选择源相对于它的源,或者根据包含目录的顺序。但GPR似乎不喜欢这个想法。
如何让探地雷达接受它?
发布于 2022-04-22 16:46:30
我尝试了openslp-2.0.0,并设法使一个构建库的GPR和另一个with的第一个构建测试-没有抱怨重复的文件。
两个项目文件都位于顶层。
对于像openslp这样的项目来说,configure过程会在顶层生成一个冗长的config.h,其负载为#define HAVE_FOO 1。
这是“公共”项目文件--我认为其中也可能有一个可执行文件(slptool),可能必须是一个单独的探地雷达,因为这个文件构建了一个库:
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;这是一个“测试”:
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;https://stackoverflow.com/questions/71958308
复制相似问题