C言語の開発環境構築(3)プログラムを書いて動作を確認する

フォルダ構成

1つのフォルダの下に、
・ソースファイル (a.c,b.c)
・ヘッダファイル (b.h)
・makefile
を置くようにしました。

ソースファイル(*.c)とヘッダファイル(*.h)の記述

・2つのソースファイルから1つのプログラムをビルドできること
・32ビット/64ビットの切り替えを確認できること
が目的なので、まったく意味のないプログラムです。
※ローカル変数のアドレスを出力…😅

注意:PCの動作を保証するものではありません。

a.c

#include "b.h"

int main() {
	b_function();
	return(0);
}

b.c

#include "b.h"

void b_function()
{
	unsigned int b;
	unsigned int *b_pointer;
	
	b_pointer = &b;
	printf("%p\n",b_pointer);
	return;
}

b.h

#include 

void b_function();

makefileの記述

AIの助けも借りながら…
32ビットでのビルドをデフォルトにして、
・1行目のBUILD_x64の値を1に変更する
・make実行時に、make BUILD_X64=1 とコマンドを投入する
のどちらかで64ビットに切り替えられるようにしました。

BUILD_X64 := 0

# -- 定数の定義
MSVC_VER := 14.51.36231
SDK_VER  := 10.0.26100.0
VS_PATH  := C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\$(MSVC_VER)
WK_PATH  := C:\Program Files (x86)\Windows Kits
SDK_PATH := $(WK_PATH)\10\lib\$(SDK_VER)

CC := clang
FLAGS := -g -Wall

ifeq ($(BUILD_X64),1)
	LIB  := -Xlinker /libpath:"$(VS_PATH)\ATLMFC\lib\x64" -Xlinker /libpath:"$(VS_PATH)\lib\x64" -Xlinker /libpath:"$(WK_PATH)\NETFXSDK\4.8\lib\um\x64" -Xlinker /libpath:"$(SDK_PATH)\ucrt\x64" -Xlinker /libpath:"$(SDK_PATH)\um\x64"
else
	LIB  := -Xlinker /libpath:"$(VS_PATH)\ATLMFC\lib\x86" -Xlinker /libpath:"$(VS_PATH)\lib\x86" -Xlinker /libpath:"$(WK_PATH)\NETFXSDK\4.8\lib\um\x86" -Xlinker /libpath:"$(SDK_PATH)\ucrt\x86" -Xlinker /libpath:"$(SDK_PATH)\um\x86"
	FLAGS += -m32
endif

# -- 対象ファイル
TARGET := prog.exe
SRCS := $(wildcard *.c)
OBJS := $(SRCS:.c=.o)
HEADERS := $(wildcard *.h)
PDB := prog.pdb

$(TARGET): $(OBJS)
	$(CC) $(FLAGS) -o $(TARGET) $(LIB) $(OBJS)

%.o : %.c $(HEADERS)
	$(CC) $(FLAGS) -c $< -o $@

# -- clean
clean:
	del -f $(TARGET) $(OBJS) $(PDB)

動作確認

Microsoft Windows [Version 10.0.26200.9168]
(c) Microsoft Corporation. All rights reserved.

C:\Users\***>cd /D d:\****\test

d:\****\test>make
clang -g -Wall -m32 -c a.c -o a.o
clang -g -Wall -m32 -c b.c -o b.o
clang -g -Wall -m32 -o prog.exe -Xlinker /libpath:"C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.51.36231\ATLMFC\lib\x86" -Xlinker /libpath:"C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.51.36231\lib\x86" -Xlinker /libpath:"C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\lib\um\x86" -Xlinker /libpath:"C:\Program Files (x86)\Windows Kits\10\lib\10.0.26100.0\ucrt\x86" -Xlinker /libpath:"C:\Program Files (x86)\Windows Kits\10\lib\10.0.26100.0\um\x86" a.o b.o

d:\****\test>prog.exe
0119F864

d:\****\test>make clean
del -f prog.exe a.o b.o prog.pdb

d:\****\test>make BUILD_X64=1
clang -g -Wall -c a.c -o a.o
clang -g -Wall -c b.c -o b.o
clang -g -Wall -o prog.exe -Xlinker /libpath:"C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.51.36231\ATLMFC\lib\x64" -Xlinker /libpath:"C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.51.36231\lib\x64" -Xlinker /libpath:"C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\lib\um\x64" -Xlinker /libpath:"C:\Program Files (x86)\Windows Kits\10\lib\10.0.26100.0\ucrt\x64" -Xlinker /libpath:"C:\Program Files (x86)\Windows Kits\10\lib\10.0.26100.0\um\x64" a.o b.o

d:\****\test>prog.exe
0000000523EFFBD4

d:\****\test>

うまくいっているのではないかと。

コメント

error: Content is protected !!