# Modifying Your makefile

If you use makefiles to build your Microsoft* application, you need to change the value for the compiler variable to use the Intel® oneAPI DPC++/C++ Compiler. You may also want to review the options specified by `CPPFLAGS`. A simple example follows:

Microsoft makefile Example
    # name of the program
      PROGRAM = area.exe

    # names of source files
      CPPSOURCES = area_main.cpp area_functions.cpp

    # names of object files
      CPPOBJECTS = area_main.obj area_functions.obj

    # Microsoft® compiler options
      CPPFLAGS = /RTC1 /EHsc

    # Use Microsoft C++®
      CPP = cl

    # link objects
      $(PROGRAM): $(CPPOBJECTS)
         link.exe /out:$@ $(CPPOBJECTS)

    # build objects
      area_main.obj: area_main.cpp area_headers.h
      area_functions.obj: area_functions.cpp area_headers.h

    # clean
      clean:  del  $(CPPOBJECTS) $(PROGRAM)

## Modified makefile for the Intel® oneAPI DPC++/C++ Compiler

Before you can run nmake with the Intel® oneAPI DPC++/C++ Compiler, you need to set the proper environment. In this example, only the name of the compiler changed:

Example
    # name of the program
      PROGRAM = area.exe

    # names of source files
      CPPSOURCES = area_main.cpp area_functions.cpp

    # names of object files
      CPPOBJECTS = area_main.obj area_functions.obj

    # # Intel® C/C++/DPC++ Compiler options
      CPPFLAGS = /RTC1 /EHsc

    # Use the Intel® C/C++/DPC++ Compiler
      CPP = [invocation]

    # link objects
      $(PROGRAM): $(CPPOBJECTS)
         link.exe /out:$@ $(CPPOBJECTS)

    # build objects
      area_main.obj: area_main.cpp area_headers.h
      area_functions.obj: area_functions.cpp area_headers.h

    # clean
      clean:  del  $(CPPOBJECTS) $(PROGRAM)

With the modified makefile, the output of nmake is similar to the following:

    Microsoft ® Program Maintenance Utility Version 8.00.50727.42
    Copyright (C) Microsoft Corporation. All rights reserved.

            icx /RTC1 /EHsc  /c area_main.cpp area_functions.cpp

    Intel® Compiler for applications running on IA-32 or IA-64
    Copyright (C) 1985-2006 Intel Corporation. All rights reserved.

    area_main.cpp
    area_functions.cpp
            link.exe /out:area.exe area_main.obj area_functions.obj

    Microsoft ® Incremental Linker Version 8.00.50727.42
    Copyright (C) Microsoft Corporation. All rights reserved.

## Using IPO in makefiles

By default, IPO generates dummy object files containing interprocedural information used by the compiler. To link or create static libraries with these object files requires specific Intel-provided tools. To use them in your makefile, replace references to `link` with `xilink` and references to `lib` with `xilib`:

Example
     # name of the program
      PROGRAM = area.exe

    # names of source files
      CPPSOURCES = area_main.cpp area_functions.cpp

    # names of object files
      CPPOBJECTS = area_main.obj area_functions.obj

    # Intel C/C++/DPC++ Compiler options
      CPPFLAGS = /RTC1 /EHsc /Qipo

    # Use the Intel C/C++/DPC++ Compiler
      CPP = [invocation]

    # link objects
      $(PROGRAM): $(CPPOBJECTS)
         xilink.exe /out:$@ $(CPPOBJECTS)

    # build objects
      area_main.obj: area_main.cpp area_headers.h
      area_functions.obj: area_functions.cpp area_headers.h

    # clean
      clean:  del  $(CPPOBJECTS) $(PROGRAM)

Where [`invocation`] is `icx` for C++ or `dpcpp-cl` for DPC++.

Parent topic: Porting from Microsoft* Visual C++* to the Intel® oneAPI DPC++/C++ Compiler