我有c ++代码需要在编译之前完成它。如何将其放入Makefile.am
?
我尝试了典型的makefile设置,目标似乎不存在:
gentest.cc:
$(SED) -i "s|FIND|REPLACE|" gentest.cc
如果你对我为什么要这样做感兴趣,那是因为我在python中编写了我的程序(slider3.py
)而我的伙伴用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
运行的任何想法?
答案 0 :(得分:5)
不要使用就地sed。
相反:
gentest_SOURCES = gentest-seded.cc
gentest-seded.cc : gentest.cc
$(SED) "s|__PREFIX__|@prefix@|" $< >$@
答案 1 :(得分:5)
你有没有考虑#define
在config.h中使用它(你正在使用autotools
,对吗?)或在编译时使用-D
传递它? sed
确实不是这种情况。
Andrew Y回答的详细信息:
在C ++源代码中,指定:
argv2[0] = SCRIPTPREFIX "/bin/slider3.py";
然后用
编译-DSCRIPTPREFIX='"/your/script/prefix"'
答案 2 :(得分:0)
您是否考虑过直接从C ++调用Python代码?这是关于using boost to call python functions from C++的教程。你在这里描述的方法似乎非常脆弱。