鑑於下面生成文件:SWIG文件更改後如何重建項目?
TARGET = _example.pyd
OFILES = example.obj example_wrap.obj
HFILES =
CC = cl
CXX = cl
LINK = link
CPPFLAGS = -DNDEBUG -DUNICODE -DWIN32 -I. -Id:\virtual_envs\py351\include
CFLAGS = -nologo -Zm200 -Zc:wchar_t- -FS -Zc:strictStrings -O2 -MD -W3 -w44456 -w44457 -w44458
CXXFLAGS = -nologo -Zm200 -Zc:wchar_t- -FS -Zc:strictStrings -D_HAS_EXCEPTIONS=0 -O2 -MD -W3 -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 -wd4577
LFLAGS = /LIBPATH:. /NOLOGO /DYNAMICBASE /NXCOMPAT /DLL /MANIFEST /MANIFESTFILE:$(TARGET).manifest /SUBSYSTEM:WINDOWS /INCREMENTAL:NO
LIBS = /LIBPATH:d:\virtual_envs\py351\libs python35.lib
.SUFFIXES: .c .cpp .cc .cxx .C
{.}.cpp{}.obj::
$(CXX) -c $(CXXFLAGS) $(CPPFLAGS) -Fo @<<
$<
<<
{.}.cc{}.obj::
$(CXX) -c $(CXXFLAGS) $(CPPFLAGS) -Fo @<<
$<
<<
{.}.cxx{}.obj::
$(CXX) -c $(CXXFLAGS) $(CPPFLAGS) -Fo @<<
$<
<<
{.}.C{}.obj::
$(CXX) -c $(CXXFLAGS) $(CPPFLAGS) -Fo @<<
$<
<<
{.}.c{}.obj::
$(CC) -c $(CFLAGS) $(CPPFLAGS) -Fo @<<
$<
<<
all: $(TARGET)
$(OFILES): $(HFILES)
$(TARGET): $(OFILES)
$(LINK) $(LFLAGS) /OUT:$(TARGET) @<<
$(OFILES) $(LIBS)
<<
mt -nologo -manifest $(TARGET).manifest -outputresource:$(TARGET);2
install: $(TARGET)
@if not exist d:\virtual_envs\py351\Lib\site-packages mkdir d:\virtual_envs\py351\Lib\site-packages
copy /y $(TARGET) d:\virtual_envs\py351\Lib\site-packages\$(TARGET)
clean:
-del $(TARGET)
-del *.obj
-del *.exp
-del *.lib
-del $(TARGET).manifest
test:
python runme.py
我想在這裏提高一兩件事情:
- 我想考慮痛飲文件(*。我)在makefile。例如,每次更改一個swig文件時都應該生成一個新的wrap文件(即:swig -python -C++ file_has_changed.cpp),然後重建項目
- 我想避免使用硬編碼的目標文件。舉例來說,我想使用通配符莫名其妙
我讀過的文檔的談論Makefiles一點點,但我仍然非常困惑使用所有cpp文件。我怎麼能做到這一點?
現在我使用的是哈克解決方案一樣swig -python -c++ whatever_file.i && nmake
,這當然是不理想,在所有
參考
實現這裏面的Visual Studio IDE是很容易以下these steps但我喜歡在SublimeText中使用這個makefile,這就是爲什麼我對知道如何擁有一個合適的Makefile非常感興趣
你的語法是一個批次的規則:在裏面,一個命令將只調用一次並供給所有的源。雖然我會分別爲每個源調用('cuz我不知道如果'swig'可以在一次調用中處理多個文件)。有關說明,請參見[批處理模式規則 - MSDN](https://msdn.microsoft.com/zh-cn/library/f2x0zs74.aspx)。 –
@BPL我設法爲'nmake'的缺陷制定瞭解決方法。他們需要通過外部邏輯來運行它,但是,根據http://stackoverflow.com/questions/4808674/nmake-inference-rules-limited-to-depth-of-1/5048633#5048633來判斷,它正是它的設計者所擁有的心裏。 –