Clang を使ってマルチプラットフォーム化する
Back
Alt+HOME
Clang(たぶんC言語という意味)はWindows向け、Linux向けなどマルチプラットフォームなので環境を共通化できそうです。
後で分かったことですが[klæŋ]と発音するようですが、私は[síːlæŋ]の方が良いと思います。
この画像をクリックすると、ダウンロードサイトへ遷移します。次項のからの説明はそのページでのダウンロードから始まっています。
GCC (GCC.exe) の代わりに Clang を使ってマルチプラットフォーム化する
- Clang(たぶんC言語という意味)はWindows向け、Linux向けなどマルチプラットフォームなので環境を共通化できそうです。
後で分かったことですが[klæŋ]と発音するようですが、
私は[síːlæŋ]の方が良いと思います。
- ▼Assets をクリックして一覧を表示します。
- リストの中から LLVM-16.0.0-rc2-win64.exe をクリックしてダウンロードし、ダブルクリックしてインストールします。
- make の時と同様に PATH を登録します。
C:\Program Files\LLVM\bin
これで今まで Linux GCC で使用していた Makefile がほぼそのまま使えるようになりました。
###################################################
# Makefile for compiling TLMForwarder.c
# Created by Yosh Todo/JE3HCZ
###################################################
# Program Name and object files
PROGRAM = TLMForwarder.exe
OBJECTS = TLMForwarder.o GetConfig.o GetSatList.o SendReport.o TLMF.o
CFLAG = -lws2_32
# Redefine MACRO
CC = clang
RM = del
# Define extention of Suffix Rules
.SUFFIXES : .c .object
# Rule of compiling program
$(PROGRAM) : $(OBJECTS)
$(CC) $(CFLAG) -o $(PROGRAM) $^
# Suffix Rule
.c.object :
$(CC) -c $<
# Target of Delet files
.PHONY : clean
clean :
$(RM) $(PROGRAM) $(OBJECTS)
# Dependency of Header Files
$(OBJECTS) : TLMF.h
Linux GCCの時と明らかに違っているのは プログラムの拡張子 exe を付けたことと CFLAG = -lws2_32 の部分です。これは VS Code でも必要でした。
Clangを使うときの注意点
- 安全のために fopen_s や localtime_s など _s の付いた関数を使うよう指示されます。
// GCC の記述
time_t timer;
struct tm *timeptr; // ポインタとして指定
char tmstr[32];
timer = time(NULL);
gmtime(timeptr, &timer); // ポインタに代入
strftime(tmstr, 32, "%Y-%m-%d %H:%M:%S", timeptr);
// Clang 推奨の記述 gmtime_s, localtime_s を使うための違い
time_t timer;
struct tm timenow; // ポインタではなく
char tmstr[32];
errno_t error;
timer = time(NULL);
error = localtime_s(&timenow, &timer); // アドレスとして代入
strftime(tmstr, 32, "%Y-%m-%d %H:%M:%S", &timenow);
Back
Alt+HOME
この 作品 は
クリエイティブ・コモンズ 表示 - 非営利 - 改変禁止 4.0 国際 ライセンス
の下に提供されています。
English
Powered by