首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cpp的未知编译器标志/参数

cpp的未知编译器标志/参数
EN

Stack Overflow用户
提问于 2016-10-06 09:13:36
回答 2查看 447关注 0票数 2

我正在学习pybind11教程。要编译一个示例,我应该使用以下行:

代码语言:javascript
复制
c++ -O3 -shared -std=c++11 -I <path-to-pybind11>/include `python-config --cflags --ldflags` example.cpp -o example.so

我不明白这部分

代码语言:javascript
复制
`python-config --cflags --ldflags`

它主要不是关于它的内容,而是关于:它在编译命令中有什么意义?它是否属于-I标志?那些"`“是怎么回事?

我检查了c++/cpp的手册,但没有发现任何东西

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-06 09:20:39

反引号

当您在shell命令中看到之间的内容时,这意味着它是一个单独的命令,在主命令之前运行,并且在主命令中使用它写入标准输出的任何内容。

例如:

代码语言:javascript
复制
rm `cat file_to_delete.txt`

假设file_to_delete.txt包含"sausage.png“,cat file_to_delete.txt部件首先运行并输出"sausage.png”,然后按如下方式插入主命令:

代码语言:javascript
复制
rm sausage.png

你的例子做了什么

因此,在您的示例中,python-config --cflags --ldflags是一个独立于c++的命令,它的输出在原始命令中被替换。如果输出-Wall -Wextra -lmath,您的c++命令将以如下方式结束:

代码语言:javascript
复制
c++ -O3 -shared -std=c++11 -I <path-to-pybind11>/include -Wall -Wextra -lmath example.cpp -o example.so

结论

因此,python-config命令的要点是提供gcc (c++实际使用gcc)标志,这将需要运行您的C++代码和您的python代码。

票数 4
EN

Stack Overflow用户

发布于 2016-10-06 09:22:25

什么

代码语言:javascript
复制
 `python-config --cflags --ldflags`

to是执行命令“python c之旗-”并替换输出(即编译命令的额外参数)。

程序python-config为您的代码提供了必要的构建选项。来自python-config文档:

python-config -用于python C/C++扩展或嵌入的输出构建选项 -c标志打印C编译器标志。 - to标志打印应该传递给链接器的标志。

提供这样一个工具是一种常见的方法,这样就可以自动在特定的is系统上找到必要的构建选项,否则就需要用户自己解决问题。

在我的Ubuntu16.04系统上,python-config --cflags --ldflag生成:

-I/usr/include/python2.7 -I/usr/include/x86_64-linux-gnu/python2.7 -fno-严格-混叠-时间-D_FORTIFY_SOURCE=2 -g -fstack-保护-强-Wformat -Werror=format-安全-DNDEBUG -g -fwrapv -O2 -Wall -W严谨-原型-L/usr/lib/python2.7/config-x86_64-linux-gnu -L/usr/lib -lpython2.7 -lpthread -ldl -lutil -lm -Xlinker -导出- -Wl,-O1 -Wl,-b符号-函数

所以,这相当于自己做这件事:

c++ -O3 -shared -std=c++11 -I /include -I/usr/include/python2.7 -I/usr/include/x86_64-linux-gnu/python2.7 -fno-严格-混叠-Wdate time -D_FORTIFY_SOURCE=2 -g -f堆栈-保护-强-Wformat -Werror=格式-安全-DNDEBUG -g -fwrapv -O2 -Wall --shared-原型-L/usr/lib/python2.7/config-x86_64-linux-gnu -L/usr/lib -lpython2.7 -lpthread -ldl -lutil -lm -Xlinker --O1 -Wl,-b符号-函数example.cpp -o example.so

现在,您可以看到为什么助手程序是方便的(它知道需要哪些库以及它们位于哪里等等)。

在相关的说明中,我更喜欢$(python-config --cflags --ldflags)而不是python-config --cflags --ldflags,因为POSIX推荐使用$(..)。您可以在这里看到“命令替换”一节下的理据

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39892059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档