3

コンパイル前にsedを実行する必要があるC++コードがあります。これをどのように配置し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.pychmod +xgentest.ccslider3.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か?

4

3 に答える 3

5

インプレースsedは使用しないでください。

その代わり:

gentest_SOURCES = gentest-seded.cc

gentest-seded.cc : gentest.cc
    $(SED) "s|__PREFIX__|@prefix@|" $< >$@
于 2009-08-25T12:40:21.117 に答える
5

#defineconfig.hで-ingすることを検討したことがありますか(使用していますか?) 、コンパイル時autotoolsにを使用して渡すことを検討しましたか?-Dこれは実際にはそうではありませんsed

アンドリューYの答えからの詳細:

C ++ソースで、次のように指定します。

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

次に、でコンパイルします

-DSCRIPTPREFIX='"/your/script/prefix"'
于 2009-08-25T12:44:36.500 に答える
0

C ++から直接Pythonコードを呼び出すことを検討しましたか?これは、ブーストを使用してC++からPython関数を呼び出すためのチュートリアルです。ここで説明している方法は非常に脆弱なようです。

于 2009-08-25T12:46:11.057 に答える