Jer*_*y L 3 automake sed autotools
我有c ++代码需要在编译之前完成它的sed.我该如何插入Makefile.am?
我尝试了典型的makefile设置,目标似乎不存在:
gentest.cc:
$(SED) -i "s|FIND|REPLACE|" gentest.cc
如果你对我为什么要这样做感兴趣,那是因为我slider3.py在python中编写了我的程序(),而我的伙伴用c ++(gentest.cc)写了他的,并且他需要调用我的.我正在通过编辑argv然后使用来完成此操作execv().
... {
char **argv2 = new char*[argc];
memset(argv2,0,sizeof(argv2));
argv2[0] = "__PREFIX__/bin/slider3.py";
memcpy(argv2 + 1, argv + 2, sizeof(char *) * (argc - 2));
int oranges = execv(argv2[0], argv2);
printf("%s\n", strerror(oranges));
return oranges;
} ...
我已经处理了#!添加到slider3.py并chmod +x使用不起作用的方法gentest.cc.我还处理了添加slider3.py到已安装的文件列表.
EXTRA_DIST=testite.sh slider3_base.py
bin_SCRIPTS = slider3.py
CLEANFILES = $(bin_SCRIPTS)
slider3.py: slider3_base.py
rm -f slider3.py
echo "#! " $(PYTHON) > slider3.py
cat slider3_base.py >> slider3.py
chmod +x slider3.py
gentest以这种方式定义Makefile.am:
bin_PROGRAMS = gentest
gentest_SOURCES = gentest.cc
gentest_LDADD = libgen.a #../libsbsat.la $(LIBM)
这在make期间无法运行(注意@模式已成功扩展Makefile):
gentest.cc:
$(SED) -i "s|__PREFIX__|@prefix@|" gentest.cc
有关如何sed在编译之前运行的任何想法gentest.cc?
不要使用就地sed.
代替:
gentest_SOURCES = gentest-seded.cc
gentest-seded.cc : gentest.cc
$(SED) "s|__PREFIX__|@prefix@|" $< >$@
Run Code Online (Sandbox Code Playgroud)
你有没有考虑过#define在config.h中使用它(你正在使用autotools,对吗?)或-D在编译时使用它?事实并非如此sed.
Andrew Y回答的细节:
在您的C++源代码中,指定:
argv2[0] = SCRIPTPREFIX "/bin/slider3.py";
Run Code Online (Sandbox Code Playgroud)
然后编译
-DSCRIPTPREFIX='"/your/script/prefix"'
Run Code Online (Sandbox Code Playgroud)