如何在windows makefile 中使用python "include" 和"libs" 路径来编译文件夹中的所有python 嵌入式C++ 程序?
How to use python "include" and "libs" path in a windows makefile to compile all python embedded C++ program in a folder?
此问题中指定的 Makefile,编译文件夹中的所有 cpp 程序,但不使用 python 嵌入式 cpp 程序。
all: myUB
sourcesC := $(wildcard ../src/*.cpp)
objectsC := $(patsubst %.cpp,%.o,$(sourcesC))
INPATH=-I"C:/Python27/include"
LIBPATH=-L"C:/Python27/libs"-lpython27
myUB:
@echo 'Building target $@'
g++ -O0 -Wall -c -g3 -fmessage-length=0 \
$(sourcesC)
del *.o
clean:
您的最终生成文件可能类似于:
all: myUB
sourcesC := $(wildcard ../src/*.cpp)
# Not used
#objectsC := $(patsubst %.cpp,%.o,$(sourcesC))
INC = -IC:\Python27\include
LIBS = -LC:\Python27\libs -lpython27
myUB:
@echo 'Building target $@'
g++ -O0 -Wall -g3 -fmessage-length=0 -o myprog.out $(sourcesC) $(INC) $(LIBS)
clean:
rm myprog.out
更新
对于 WinMain() 的未定义引用,这意味着链接器无法在您的代码中找到此函数。您需要包含一个包含它的 library/object 或者您可以在 cpp 文件中自己定义它,例如:
#include <windows.h>
int WINAPI (*MyDummyReferenceToWinMain)(HINSTANCE hInstance, ..., int
nShowCmd ) = &WinMain;
我从 here 那里得到了函数模板。
但这似乎意味着您正在创建一个 windows 应用程序,而不是使用 int main(...)
入口点的控制台应用程序。
更新2
我已经制作了一个新的 makefile 来执行您在最新评论中所要求的,这似乎是为每个源文件创建一个可执行文件 - 我假设每个源文件都有自己的主文件。
# Build vars
CXX = g++
CXX_FLAGS = -O0 -Wall -g3
INC = -IC:\Python27\includ
LIBS = -LC:\Python27\libs -lpython27
# Sources
SRC_DIR=src
SOURCES = $(wildcard $(SRC_DIR)/*.cpp)
$(info SOURCES: $(SOURCES))
# Executables
EXE_DIR=bin
EXECUTABLES = $(subst $(SRC_DIR)/,$(EXE_DIR)/,$(subst cpp,out,$(SOURCES)))
$(info EXECUTABLES: $(EXECUTABLES))
$(info ----)
# Directories
DIRS = $(EXE_DIR)
# Rule to create folders and compile executables
all: $(DIRS) $(EXECUTABLES)
# Pattern rule to build each executable
$(EXE_DIR)/%.out : $(SRC_DIR)/%.cpp
@echo "compiling $< --> $@"
@$(CXX) $(CXX_FLAGS) -o $@ $< $(INC) $(LIBS)
# Rule to create output dirs
$(DIRS):
@echo "Creating output folders"
@mkdir -p $(EXE_DIR)
# Rule to clean up
clean:
@echo "Cleaning"
@rm -rf $(EXE_DIR)
这应该在文件夹 bin/
中为文件夹 src/
中的每个源文件 (.cpp) 创建一个可执行文件。
此问题中指定的 Makefile,编译文件夹中的所有 cpp 程序,但不使用 python 嵌入式 cpp 程序。
all: myUB
sourcesC := $(wildcard ../src/*.cpp)
objectsC := $(patsubst %.cpp,%.o,$(sourcesC))
INPATH=-I"C:/Python27/include"
LIBPATH=-L"C:/Python27/libs"-lpython27
myUB:
@echo 'Building target $@'
g++ -O0 -Wall -c -g3 -fmessage-length=0 \
$(sourcesC)
del *.o
clean:
您的最终生成文件可能类似于:
all: myUB
sourcesC := $(wildcard ../src/*.cpp)
# Not used
#objectsC := $(patsubst %.cpp,%.o,$(sourcesC))
INC = -IC:\Python27\include
LIBS = -LC:\Python27\libs -lpython27
myUB:
@echo 'Building target $@'
g++ -O0 -Wall -g3 -fmessage-length=0 -o myprog.out $(sourcesC) $(INC) $(LIBS)
clean:
rm myprog.out
更新
对于 WinMain() 的未定义引用,这意味着链接器无法在您的代码中找到此函数。您需要包含一个包含它的 library/object 或者您可以在 cpp 文件中自己定义它,例如:
#include <windows.h>
int WINAPI (*MyDummyReferenceToWinMain)(HINSTANCE hInstance, ..., int
nShowCmd ) = &WinMain;
我从 here 那里得到了函数模板。
但这似乎意味着您正在创建一个 windows 应用程序,而不是使用 int main(...)
入口点的控制台应用程序。
更新2
我已经制作了一个新的 makefile 来执行您在最新评论中所要求的,这似乎是为每个源文件创建一个可执行文件 - 我假设每个源文件都有自己的主文件。
# Build vars
CXX = g++
CXX_FLAGS = -O0 -Wall -g3
INC = -IC:\Python27\includ
LIBS = -LC:\Python27\libs -lpython27
# Sources
SRC_DIR=src
SOURCES = $(wildcard $(SRC_DIR)/*.cpp)
$(info SOURCES: $(SOURCES))
# Executables
EXE_DIR=bin
EXECUTABLES = $(subst $(SRC_DIR)/,$(EXE_DIR)/,$(subst cpp,out,$(SOURCES)))
$(info EXECUTABLES: $(EXECUTABLES))
$(info ----)
# Directories
DIRS = $(EXE_DIR)
# Rule to create folders and compile executables
all: $(DIRS) $(EXECUTABLES)
# Pattern rule to build each executable
$(EXE_DIR)/%.out : $(SRC_DIR)/%.cpp
@echo "compiling $< --> $@"
@$(CXX) $(CXX_FLAGS) -o $@ $< $(INC) $(LIBS)
# Rule to create output dirs
$(DIRS):
@echo "Creating output folders"
@mkdir -p $(EXE_DIR)
# Rule to clean up
clean:
@echo "Cleaning"
@rm -rf $(EXE_DIR)
这应该在文件夹 bin/
中为文件夹 src/
中的每个源文件 (.cpp) 创建一个可执行文件。