为Makefile.am中的源调用SED 我有C++代码,在编译之前需要对它进行一个SED。如何将其放入Makefile.am

为Makefile.am中的源调用SED 我有C++代码,在编译之前需要对它进行一个SED。如何将其放入Makefile.am,sed,autotools,automake,Sed,Autotools,Automake,我尝试了典型的makefile设置,但目标似乎不存在: gentest.cc: $(SED)-i“s | FIND | REPLACE |”gentest.cc 如果你对我为什么要这么做感兴趣,那是因为我在Python中编写了我的程序( SLRDR3.3.py.),我的伙伴用C++编写了他的代码( Guest.cc/代码>),并且他需要调用我的。我通过编辑argv,然后使用execv()来实现这一点 。。。{ char**argv2=new char*[argc]; memset(argv2,0

我尝试了典型的makefile设置,但目标似乎不存在:

gentest.cc:

$(SED)-i“s | FIND | REPLACE |”gentest.cc

如果你对我为什么要这么做感兴趣,那是因为我在Python中编写了我的程序(<代码> SLRDR3.3.py.<代码>),我的伙伴用C++编写了他的代码(<代码> Guest.cc/代码>),并且他需要调用我的。我通过编辑
argv
,然后使用
execv()
来实现这一点

。。。{

char**argv2=new char*[argc];

memset(argv2,0,sizeof(argv2));

argv2[0]=“前缀”\uuuuu/bin/slider3.py”

memcpy(argv2+1,argv+2,sizeof(char*)*(argc-2));

int-oranges=execv(argv2[0],argv2);

printf(“%s\n”,strerror(橙子));

返回橙子;

}…

我已经处理好了获取
#gentest.cc
的方法将code>添加到
slider3.py
chmod+x
。我还处理了将
slider3.py
添加到已安装文件列表中的问题

EXTRA\u DIST=testite.sh slider3\u base.py

bin\u SCRIPTS=slider3.py

CLEANFILES=$(bin\u脚本)

slider3.py:slider3\u base.py

rm-f滑块3.py

echo“#!”$(PYTHON)>slider3.py

cat slider3\u base.py>>slider3.py

chmod+x slider3.py

gentest
Makefile.am
中是这样定义的:

bin_PROGRAMS=gentest

gentest\u SOURCES=gentest.cc

gentest_LDADD=libgen.a#../libsbsat.la$(LIBM)

并且在make期间无法运行该命令(注意,
@
模式在
Makefile
中成功扩展):

gentest.cc:

$(SED)-i“s|uuuuu PREFIX_uu124;@PREFIX@|”gentest.cc


在编译
gentest.cc
之前,关于如何运行
sed
的任何想法?

不要使用就地sed

相反:

gentest_SOURCES = gentest-seded.cc

gentest-seded.cc : gentest.cc
    $(SED) "s|__PREFIX__|@prefix@|" $< >$@
gentest\u SOURCES=gentest-seed.cc
gentest-seed.cc:gentest.cc
$(SED)“s|uuuuuuuuuuuu124;@PREFIX@|“$<>$@

您是否考虑过在config.h中定义它(您正在使用
自动工具,对吗?)或在编译时使用
-D
传递它?对于
sed
,情况并非如此

Andrew Y回答的细节如下:

<>在C++源代码中,指定:

argv2[0] = SCRIPTPREFIX "/bin/slider3.py";
然后用

-DSCRIPTPREFIX='"/your/script/prefix"'

您是否考虑过直接从C++调用Python代码?这里有一个关于的教程。您在这里描述的方法似乎非常脆弱。

是的,我第一次使用自动工具。你能给我看看你的建议的例子吗?啊,安德鲁·Y的建议就是你提到的-D吗?如果你有config.h(AC_config_头),你可以在configure.AC中使用类似AC_DEFINE_UNQUOTED([前缀],“$PREFIX”])。你真的必须使用它,使用文档和其他来源来获得这种感觉。向Makefile.am添加CPPFLAGS并使用-DTHE\u PREFIX=\“@PREFIX@\”(或类似的内容-注意正确转义)传递它可能更容易。在这两种情况下,您都需要在代码中执行_PREFX“/bin/slider3.py”。这让我觉得你可能更喜欢@bindir@而不是@prefix@.Yes,我提到了这两个,第二个与Andrew Y的一致。(我是第一个:)啊,我甚至没有想过使用@bindir@,但那会更正确。我的搭档也决定使用CVS,所以你可以想象这将是一场漫长的战斗,直到我们完成:-)切换到Boost的问题是我宁愿不重写他的代码。我认为通过MaX文件使用一个替换是适合避免的。我肯定会在将来用C++来提高头脑。