How to use makefiles in Visual Studio?

C++Visual StudioMakefile

C++ Problem Overview


I heard a lot about makefiles and how they simplify the compilation process. I'm using VS2008. Can somebody please suggest some online references or books where I can find out more about how to deal with them?

C++ Solutions


Solution 1 - C++

The Microsoft Program Maintenance Utility (NMAKE.EXE) is a tool that builds projects based on commands contained in a description file.

NMAKE Reference

Solution 2 - C++

A UNIX guy probably told you that. :)

You can use makefiles in VS, but when you do it bypasses all the built-in functionality in MSVC's IDE. Makefiles are basically the reinterpret_cast of the builder. IMO the simplest thing is just to use Solutions.

Solution 3 - C++

To answer the specific questions...

> I'm using VS2008. Can somebody please suggest some online references > or books where I can find out more about how to deal with them?

This link will give you a good introduction into Makefiles by mapping it with Visual Studio.

http://cognitivewaves.wordpress.com/makefiles/">Introduction to Makefiles for Visual Studio developers

> I heard a lot about makefiles and how they simplify the compilation > process.

Makefiles are powerful and flexible but may not be the best solution to simplify the process. Consider CMake which abstracts the build process well which is explained in this link.

http://cognitivewaves.wordpress.com/cmake-and-visual-studio/">CMake for Visual Studio Developers

Solution 4 - C++

I actually use a makefile to build any dependencies needed before invoking devenv to build a particular project as in the following:

debug: coratools_debug
    devenv coralib.vcproj /build debug

coratools_debug: nothing
    cd ../coratools
    nmake debug
    cd $(MAKEDIR)

You can also use the msbuild tool to do the same thing:

debug: coratools_debug
    msbuild coralib.vcxproj /p:Configuration=debug

coratools_debug: nothing
    cd ../coratools
    nmake debug
    cd $(MAKEDIR)

In my opinion, this is much easier than trying to figure out the overly complicated visual studio project management scheme.

Solution 5 - C++

The VS equivalent of a makefile is a "Solution" (over-simplified, I know).

Solution 6 - C++

To summarize with a complete solution...

There are 2 options:

  1. Use NMAKE from the Developer Command Prompt for Visual Studio

The shortcut exists in your Start Menu. Look inside the makefile to see if there are any 'setup' actions. Actions appear as the first word before a colon. Typically, all good makefiles have an "all" action so you can type: NMAKE all

  1. Create a Solution and Project Files for each binary.

Most well designed open source solutions provide a makefile with a setup action to generate Visual Studio Project Files for you so look for those first in your Makefile.

Otherwise you need to drag and drop each file or group of files and folders into each New Project you create within Visual Studio.

Hope this helps.

Solution 7 - C++

Makefiles and build files are about automating your build. If you use a script like MSBuild or NAnt, you can build your project or solution directly from command line. This in turn makes it possible to automate the build, have it run by a build server.

Besides building your solution it is typical that a build script includes task to run unit tests, report code coverage and complexity and more.

Solution 8 - C++

If you are asking about actual command line makefiles then you can export a makefile, or you can call MSBuild on a solution file from the command line. What exactly do you want to do with the makefile?

You can do a search on SO for MSBuild for more details.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionchester89View Question on Stackoverflow
Solution 1 - C++Alessandro JacopsonView Answer on Stackoverflow
Solution 2 - C++John DiblingView Answer on Stackoverflow
Solution 3 - C++ap-osdView Answer on Stackoverflow
Solution 4 - C++Jon TrauntveinView Answer on Stackoverflow
Solution 5 - C++Joel CoehoornView Answer on Stackoverflow
Solution 6 - C++justdan23View Answer on Stackoverflow
Solution 7 - C++mmiikaView Answer on Stackoverflow
Solution 8 - C++TimView Answer on Stackoverflow