How to rebuild project after SWIG files changed?
<p>Given the below makefile:</p>

<pre><code>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 @&lt;&lt;
    $&lt;
&lt;&lt;

{.}.cc{}.obj::
    $(CXX) -c $(CXXFLAGS) $(CPPFLAGS) -Fo @&lt;&lt;
    $&lt;
&lt;&lt;

{.}.cxx{}.obj::
    $(CXX) -c $(CXXFLAGS) $(CPPFLAGS) -Fo @&lt;&lt;
    $&lt;
&lt;&lt;

{.}.C{}.obj::
    $(CXX) -c $(CXXFLAGS) $(CPPFLAGS) -Fo @&lt;&lt;
    $&lt;
&lt;&lt;

{.}.c{}.obj::
    $(CC) -c $(CFLAGS) $(CPPFLAGS) -Fo @&lt;&lt;
    $&lt;
&lt;&lt;

all: $(TARGET)

$(OFILES): $(HFILES)

$(TARGET): $(OFILES)
    $(LINK) $(LFLAGS) /OUT:$(TARGET) @&lt;&lt;
      $(OFILES) $(LIBS)
&lt;&lt;
    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
</code></pre>

<p>I'd like to improve a couple of things here:</p>

<ul>
<li>I'd like to consider swig files (*.i) in the makefile. For example, every time some swig file has been changed a new wrap file should be generated (ie: swig -python -c++ file_has_changed.cpp) and then rebuild the project</li>
<li>I'd like to avoid having hardcoded object files. For instance, I'd like to use all cpp files using wildcards somehow</li>
</ul>

<p>I've read a little bit of the docs talking about <a href="https://msdn.microsoft.com/en-us/library/yz1tske6.aspx" rel="nofollow">Makefiles</a> but I'm still pretty much confused. How could I achieve this?</p>

<p>Right now I'm using a <strong>hacky</strong> solution like <code>swig -python -c++ whatever_file.i &amp;&amp; nmake</code>, that's of course it's not ideal at all</p>

<p>REFERENCES</p>

<p>Achieving this inside visual studio IDE is quite easy following <a href="http://stackoverflow.com/questions/5969173/how-to-swig-in-vs2010/6117641#6117641">these steps</a> but I'd like to use this makefile inside SublimeText, that's why I'm quite interested on knowing how to have a proper Makefile</p>

<p>I have solved this using CMake and this translates directly to using <code>autoconf</code> and <code>automake</code> and thereby makefiles.</p>

<p>The idea is to introduce the following variable</p>

<pre><code>DEPENDENCIES = `swig -M -python -c++ -I. example.i | sed 's/\//g'`
</code></pre>

<p>and make your target depend on this. The above generates a list of dependencies of all headers and <code>.i</code> files your SWIG interface file may include.</p>

python c++ makefile visual-studio-2015 swig