MacBookAir(2017 A1466)のSSD換装
MBAのSSD換装をしたのでメモを残す。
私のMBAはSSDの容量が128GB である。
購入当初は外部ストレージを兼用すればいいと思っていたが、普段使いの中で自然と空き容量が逼迫した。
ついに残5GBとなったところで、BigSurがインストール出来ず、SSD換装を決めた。
■購入部品
SSD換装には下記部品の用意が必要。
・SSD本体
・本体の裏蓋を開ける工具
・SSD→M.2変換アダプタ
■SSD本体
下記のM.2SSDを購入した。
kakaku.com
ネットで検索するとcrucial製の事例が多いようだが、こちらで問題無く動作している。容量は512GBにした。
■工具
交換に必要な工具は
・星形ドライバ 1.2mm
・トルクスドライバ T5
世の中には以下のようなMBAのSSD換装用の工具セットがあるようだ。
www.amazon.co.jp
販売元が怪しいので、信頼のおけるメーカーからドライバーを単品購入した。
https://www.amazon.co.jp/gp/product/B002SQLE8G/ref=ppx_yo_dt_b_asin_title_o01_s00?ie=UTF8&psc=1
Amazon | アネックス(ANEX) 精密ドライバー 特殊 5溝 1.2mm No.3470-G | DIY・工具・ガーデン
■SSD→M.2変換アダプタ
こちらはメルカリで揃えた(相場は1000円位)
変換アダプタは販売元が怪しい所が多いので、匿名取引が出来るメルカリで揃えるのがいいかもしれない
■まとめ
トラブル無く、換装出来た。
手元に元々搭載していたSSDが余ったのだが、それはどうしよう。
端子が特殊規格なので、多く出回っている外付けケースには入らない。
一応外付けケースがあるにはあるらしいので、信頼出来る販売元を見つけたら買うことにする。
複数の拡張子のソースコードをビルドしたい時のMakefileの書き方
タイトルの件、わからないことがあったので覚書を残す。
・わからなかったこと
カレントディレクトリ以下のファイルを検索して、ビルド対象の拡張子毎にオブジェクトリストを生成し、最後にそれらをリンクしたかった。
しかし、オブジェクトのリストに*.o以外の拡張子も含まれてしまい、リンクエラーになる。
どんなコードを書いたか忘れてしまったが、例えば*.cのオブジェクトリストを見ると、下記のようになっていた。
OBJC = main.c hoge.c foo.c foobar.c main.o hoge.o foo.o foobar.o
この状態でOBJCをリンカに与えると、処理できない拡張子(つまりは*.c)が含まれているため、リンクエラーになる。
また、cleanのルールがrm -f $(TARGET) $(OBJC)とかになっていると、ソースも一緒に消えてしまう。
・正しいコード
C/C++の開発をしていると、拡張子が3個以上になる事がよくある。
規模が小さいならbashでビルド書いてもいいが、Makefileの方が小さく纏まり、拡張も簡単なのでメモとしてテンプレートを残す。
TARGET = GnuMakePractice CC = gcc CXX = g++ CFLAGS = -O0 -Wall XFLAGS = -O0 -Wall LDFLAGS = INCLUDE = . SRCDIR = . SRCC = $(shell find $(SRCDIR) -type f -name "*.c") SRCX = $(shell find $(SRCDIR) -type f -name "*.cpp") OBJC = $(SRCC:.c=.o) OBJX = $(SRCX:.cpp=.o) all: $(TARGET) $(TARGET): $(OBJC) $(OBJX) $(CC) -o $(LDFLAGS) $@ $(OBJC) $(OBJX) %.c.o : %.c $(CC) -c $(CFLAGS) $(INCLUDE) $(SRCC) -o $@ $(OBJC) %.cpp.o : %.cpp $(CXX) -c $(XFLAGS) $(INCLUDE) $(SRCX) -o $@ $(OBJX) .PHONY:clean clean: rm -f *.o $(TARGET)
GitHub - mogu383/GnuMakePractice: This is a Gnu Make practice repository.
[2020/12/6追記]
アクセス数が増えていたので、コードの不備を直しました。
このようなMakefileを書こうとした時、拡張子が2つ以上でシンプルな作りのサンプルは少ないように感じました。
何か作る時、このMakefileをベースにするのもいいかもしれません。