C++ 包括 Python.h 使用 makefile 编译
C++ including Python.h compiling using makefile
我正在尝试编译一个 C++ 程序,它使用 Python.h
来执行一些 python 脚本。在添加 python 之前,我有一个运行良好的 makefile。我将代码添加到 运行 python 脚本,其中涉及包含 Python.h
文件。
我编辑了 makefile 以包含此文件,但没有成功。
我的生成文件:
CC = g++
SHELL = /bin/sh
EXECUTABLES = Software_V2
CFLAGS += -O2 -g0 -Wall -pedantic -Wstrict-prototypes -std=c99 $(shell python3-config --cflags)
LIBS = -lm -lrt -laes_access -lstdc++ -pthread
OBJS = $(EXECUTABLES).o
.PHONEY: all
all: $(EXECUTABLES)
.PHONEY: clean
clean:
rm -f *.[bo]
rm -f *.err
rm -f $(EXECUTABLES)
$(EXECUTABLES): $(OBJS)
$(CC) $(OBJS) $(CFLAGS) $(LIBS) -o $@
我已经安装了以下库:
sudo apt-get install python-dev
sudo apt-get install python3-dev
sudo apt install libpython3.7-dev
运行ning make
之后的错误我收到以下错误:
g++ -c -o Software_V2.o Software_V2.cpp
Software_V2.cpp:3:10: fatal error: Python.h: No such file or directory
#include <Python.h>
^~~~~~~~~~
compilation terminated.
make: *** [<builtin>: Software_V2.o] Error 1
我还尝试将包含从 #include <Python.h>
更改为 #include <python3.7m/Python.h>
None我的尝试成功了,我现在没有灵感去尝试一些新的东西,也许你们知道如何解决我的问题。谢谢!
尝试 include "Python.h"
- 当您使用 <> 时,预编译器会在一组不同的目录中查找。
还有 运行 python3-config --cflags
在命令行上确保它给你正确的包含目录 - Python.h 文件应该在其中之一。
最终,问题是该文件未在预编译器检查的标准目录中找到,也未在您指定的目录(使用 -I 选项)中找到。
您正在混合使用 C 和 C++。这些是完全不同的语言:您不应该混淆它们。
在 makefile 中,默认规则使用 CC
保存 C 编译器,使用 CXX
保存 C++ 编译器。同样,他们使用 CFLAGS
来保存 C 编译器的标志,并使用 CXXFLAGS
来保存 C++ 编译器的标志。
在您的 makefile 中您没有设置 CXX
或 CXXFLAGS
变量,但您试图使用默认规则来构建您的目标文件。 CXX
的默认值为 g++
(在您的系统上),CXXFLAGS
的默认值为空。这就是为什么当 make 向您显示编译命令时,您的选项 none 出现在那里:
g++ -c -o Software_V2.o Software_V2.cpp
如果您正在尝试编译 C++ 代码(暗示您的文件扩展名是 .cpp
而不是 .c
),那么您应该设置 CXXFLAGS
而不是 CFLAGS
.
此外,如果您尝试编译 C++,则设置 -std=c99
是错误的;该标志设置 C 1999 标准,而不是 C++。
我正在尝试编译一个 C++ 程序,它使用 Python.h
来执行一些 python 脚本。在添加 python 之前,我有一个运行良好的 makefile。我将代码添加到 运行 python 脚本,其中涉及包含 Python.h
文件。
我编辑了 makefile 以包含此文件,但没有成功。
我的生成文件:
CC = g++
SHELL = /bin/sh
EXECUTABLES = Software_V2
CFLAGS += -O2 -g0 -Wall -pedantic -Wstrict-prototypes -std=c99 $(shell python3-config --cflags)
LIBS = -lm -lrt -laes_access -lstdc++ -pthread
OBJS = $(EXECUTABLES).o
.PHONEY: all
all: $(EXECUTABLES)
.PHONEY: clean
clean:
rm -f *.[bo]
rm -f *.err
rm -f $(EXECUTABLES)
$(EXECUTABLES): $(OBJS)
$(CC) $(OBJS) $(CFLAGS) $(LIBS) -o $@
我已经安装了以下库:
sudo apt-get install python-dev
sudo apt-get install python3-dev
sudo apt install libpython3.7-dev
运行ning make
之后的错误我收到以下错误:
g++ -c -o Software_V2.o Software_V2.cpp
Software_V2.cpp:3:10: fatal error: Python.h: No such file or directory
#include <Python.h>
^~~~~~~~~~
compilation terminated.
make: *** [<builtin>: Software_V2.o] Error 1
我还尝试将包含从 #include <Python.h>
更改为 #include <python3.7m/Python.h>
None我的尝试成功了,我现在没有灵感去尝试一些新的东西,也许你们知道如何解决我的问题。谢谢!
尝试 include "Python.h"
- 当您使用 <> 时,预编译器会在一组不同的目录中查找。
还有 运行 python3-config --cflags
在命令行上确保它给你正确的包含目录 - Python.h 文件应该在其中之一。
最终,问题是该文件未在预编译器检查的标准目录中找到,也未在您指定的目录(使用 -I 选项)中找到。
您正在混合使用 C 和 C++。这些是完全不同的语言:您不应该混淆它们。
在 makefile 中,默认规则使用 CC
保存 C 编译器,使用 CXX
保存 C++ 编译器。同样,他们使用 CFLAGS
来保存 C 编译器的标志,并使用 CXXFLAGS
来保存 C++ 编译器的标志。
在您的 makefile 中您没有设置 CXX
或 CXXFLAGS
变量,但您试图使用默认规则来构建您的目标文件。 CXX
的默认值为 g++
(在您的系统上),CXXFLAGS
的默认值为空。这就是为什么当 make 向您显示编译命令时,您的选项 none 出现在那里:
g++ -c -o Software_V2.o Software_V2.cpp
如果您正在尝试编译 C++ 代码(暗示您的文件扩展名是 .cpp
而不是 .c
),那么您应该设置 CXXFLAGS
而不是 CFLAGS
.
此外,如果您尝试编译 C++,则设置 -std=c99
是错误的;该标志设置 C 1999 标准,而不是 C++。