当前位置: 首页 > 知识库问答 >
问题:

在bash中运行命令和在makefile中运行命令有什么区别?

夏侯昊明
2023-03-14

我有这个命令来编译我的程序。

c++ -O3 -Wall -shared -pthread -std=c++11 -fPIC $(python3 -m pybind11 --includes) f1.cpp f2.cpp -o exemple$(python3-config --extension-suffix)

我创建了以下makefile。

test:
    c++ -O3 -Wall -shared -pthread -std=c++11 -fPIC $(python3 -m pybind11 --includes) f1.cpp f2.cpp -o exemple$(python3-config --extension-suffix)

如果从terminal运行该命令将成功,但make将失败。

它将失败,并出现错误

pybind11/pybind11.h: No such file or directory
    1 | #include <pybind11/pybind11.h>

该文件应该在命令中使用$(python3-m pybind11--includes)导入。

我认为Makefile中的命令执行起来很像bash脚本。

在bash中运行命令和在Makefile中运行命令有什么区别?

共有2个答案

能旭
2023-03-14

将命令结果作为当前命令的一部分插入shell中的更可移植的方法是使用``而不是$(python3-m pybind11--includes)。Make不解释此类引用。

test:
    c++ -O3 -Wall -shared -pthread -std=c++11 -fPIC `python3 -m pybind11 --includes` f1.cpp f2.cpp -o exemple`python3-config --extension-suffix`
颜永怡
2023-03-14

生成文件在/bin/sh中运行命令(默认情况下)。如果您正在使用bash特性,这有时会起到很大的作用;但你不是所以那无关紧要。

这里的问题是$字符对于make是特殊的:它引入了make变量。如果要将$传递给shell,则必须将其加倍:

test:
        c++ -O3 -Wall -shared -pthread -std=c++11 -fPIC $$(python3 -m pybind11 --includes) f1.cpp f2.cpp -o exemple$$(python3-config --extension-suffix)
 类似资料:
  • 我有下面的课。它允许我通过java执行命令。 当我运行命令时,上一个命令的结果没有保存。例如: 给出输出: 为什么第二个“ls”命令不显示“bin”目录的内容?

  • 问题内容: 我运行一个包含此行的python脚本 然后,我在服务器上运行相同的代码,并收到以下错误消息 因此,我要做的就是print bashCommand在运行之前,在终端中插入一个比命令更清晰的信息os.system()。 当然,我再次收到错误(由引起os.system(bashCommand)),但是在该错误出现之前,它会在终端中打印命令。然后我只是复制了输出,然后将复制粘贴到终端中,然后按

  • 问题内容: 有没有办法从Python运行BASH内置命令? 我试过了: 及其许多变化。我想跑步还是。 问题答案: 我终于找到了可行的解决方案。 谢谢大家的投入。

  • 问题内容: 有没有办法在Java应用程序中运行此命令行? 我可以用命令运行它,但是我不能在Java中运行它。 问题答案:

  • 问题内容: 我有一个bash脚本,可以通过命令行像这样运行: 我在调用某个php文件后尝试执行上述命令。 我现在所拥有的是: 但这是行不通的。我尝试过使用和太,但剧本从来没有得到执行。 但是,当我尝试运行它时,它确实起作用,并且是所有文件的列表。 我不确定这是由于我使用的VPS的限制还是问题出在其他地方? 问题答案: 您可能需要在调用脚本之前将chdir更改到正确的目录。这样,您可以在调用shel

  • 我无法在NodeJS应用程序中使用< code>exec运行Conda命令。 我收到以下错误: /bin/sh: /用户/用户名/桌面/存储库/项目/XYZ: 是一个目录 命令未发现错误:您的 shell 未正确配置为使用“conda 激活”。要初始化您的 shell,请运行 目前支持的shell有:-bash-fish-tcsh-xonsh-zsh-powershell 请参阅“conda in