フォルダ構成
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
#includevoid 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>
うまくいっているのではないかと。
コメント