Visible to Intel only — GUID: GUID-2513D955-A18B-44C4-88E6-104FC801E6FB
Visible to Intel only — GUID: GUID-2513D955-A18B-44C4-88E6-104FC801E6FB
Modify Your makefile
If you use makefiles to build your GCC* application, you need to change the value for the GCC compiler variable to use the Intel® C++ Compiler Classic. You may also want to review the options specified by CFLAGS. For example, a sample GCC makefile:
# Use gcc compiler
CC = gcc
# Compile-time flags
CFLAGS = -O2 -std=c99
all: area_app
area_app: area_main.o area_functions.o
$(CC) area_main.o area_functions.o -o area
area_main.o: area_main.c
$(CC) -c $(CFLAGS) area_main.c
area_functions.o: area_functions.c
$(CC) -c -fno-asm $(CFLAGS) area_functions.c
clean: rm -rf *o area
Modified makefile for the Intel® C++ Compiler Classic
In this example, the name of the compiler is changed to use icc
# Use Intel C/C++ Compiler
CC = icc
# Compile-time flags
CFLAGS = -std=c99
all: area_app
area_app: area_main.o area_functions.o
$(CC) area_main.o area_functions.o -o area
area_main.o: area_main.c
$(CC) -c $(CFLAGS) area_main.c
area_functions.o: area_functions.c
$(CC) -c -fno-asm $(CFLAGS) area_functions.c
clean: rm -rf *o area
If your GCC code includes features that are not supported with the Intel® C++ Compiler Classic (compiler options, language extensions, macros, pragmas, and so on), you can compile those sources separately with GCC if necessary.
In the above makefile, area_functions.c is an example of a source file that includes features unique to GCC. Because the Intel® C++ Compiler Classic uses the O2 option by default and GCC uses option O0 as the default, we instruct GCC to compile at option O2. We also include the -fno-asm switch from the original makefile because this switch is not supported with the Intel® C++ Compiler Classic. The following sample makefile is modified for using the Intel® C++ Compiler Classic and GCC together:
# Use Intel C/C++ Compiler
CC = icc
# Use gcc for files that cannot be compiled by icc
GCC = gcc
# Compile-time flags
CFLAGS = -std=c99
all: area_app
area_app: area_main.o area_functions.o
$(CC) area_main.o area_functions.o -o area
area_main.o: area_main.c
$(CC) -c $(CFLAGS) area_main.c
area_functions.o: area_functions.c
$(GCC) -c -O2 -fno-asm $(CFLAGS) area_functions.c
clean: rm -rf *o area
Output of make using a modified makefile:
icc -c -std=c99 area_main.c
gcc -c -O2 -fno-asm -std=c99 area_functions.c
icc area_main.o area_functions.o -o area
Use 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 special Intel-provided tools. To use them in your makefile, simply replace references to "ld" with "xild" and references to "ar" with "xiar", or use icc to link as shown in the example:
# Use Intel C/C++ Compiler
CC = icc
# Compile-time flags
CFLAGS = -std=c99 -ipo
all: area_app
area_app: area_main.o area_functions.o
$(CC) area_main.o area_functions.o -o area
area_main.o: area_main.c
$(CC) -c $(CFLAGS) area_main.c
area_functions.o: area_functions.c
$(CC) -c $(CFLAGS) area_functions.c
clean: rm -rf *o area