makefile の変更

makefile を使用して gcc アプリケーションをビルドする場合、インテル® oneAPI DPC++/C++ コンパイラーを使用するように、gcc コンパイラー変数の値を変更する必要があります。また、CFLAGS で指定されているオプションも確認してください。次に例を示します。

gcc makefile の例

# gcc コンパイラーを使用する
  CC = gcc 

# コンパイル時のオプション
  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

インテル® oneAPI DPC++/C++ コンパイラー用に変更した makefile の例

# インテル® C/C++/DPC++ コンパイラーを使用する
  CC = [invocation]

# コンパイル時のオプション
  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

[invocation] は icpx (C++) または dpcpp (DPC++) です。

gcc コードに、インテル® oneAPI DPC++/C++ コンパイラーでサポートされていない機能 (コンパイラー・オプション、言語拡張、マクロ、プラグマなど) が含まれている場合は、必要に応じて、これらのソースを個別に gcc でコンパイルすることができます。

上記の makefile では、area_functions.c ソースファイルに gcc 固有の機能が含まれています。インテル® oneAPI DPC++/C++ コンパイラーでは、O2 コンパイラー・オプションがデフォルトで使用されますが、gcc のデフォルトは O0 のため、gcc に O2 オプションでコンパイルするように指示します。また、インテル® oneAPI DPC++/C++ コンパイラーでは、gcc makefile にある -fno-asm オプションはサポートされていないため、このオプションも gcc のコンパイルに含めます。

インテル® oneAPI DPC++/C++ コンパイラーおよび gcc 用に変更した makefile の例
# インテル® C/C++/DPC++ コンパイラーを使用する
  CC = [invocation]
# [invocation] でコンパイルできないファイルに gcc を使用する
  GCC = gcc
# コンパイル時のオプション
  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

[invocation] は icpx (C++) または dpcpp (DPC++) です。

変更した makefile による make の出力

[invocation] -c -std=c99 area_main.c
gcc -c -O2 -fno-asm -std=c99 area_functions.c
[invocation] area_main.o area_functions.o -o area

[invocation] は icpx (C++) または dpcpp (DPC++) です。

makefile での IPO の使用

デフォルトでは、IPO はコンパイラーによって使用されるプロシージャー間の情報を含む "仮の" オブジェクト・ファイルを生成します。これらのオブジェクト・ファイルを使用してスタティック・ライブラリーをリンクまたは作成する場合、特定のインテルにより提供されるツールが必要になります。これらのツールを makefile で使用するには、"ld" を "xild"、"ar" を "xiar" にそれぞれ置換するか、icx または icpx (C++) あるいは dpcpp (DPC++) を使用して次のようにリンクします。

インテル® oneAPI DPC++/C++ コンパイラー用に変更した IPO を使用する makefile の例
# インテル® C/C++/DPC++ コンパイラーを使用する
  CC = [invocation]
# コンパイル時のオプション
  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

[invocation] は icpx (C++) または dpcpp (DPC++) です。