グレインの備忘録

プログラミング関係とかをつらつらと。

Makefile覚書

毎回作るときに忘れるのでメモ。

変数

定義

変数を作るときは変数名 = 値でよい。$(変数名)=としてはならない。

CXX = g++

参照

参照するときは$(変数名)で参照

$(CXX) $< -o $@

自動変数

ターゲットの名前などを参照できる。

$@ : ターゲットファイル名
$% : ターゲットがアーカイブメンバだったときのターゲットメンバ名
$< : 最初の依存するファイルの名前
$? : ターゲットより新しいすべての依存するファイル名
$^ : すべての依存するファイルの名前
$+ : Makefileと同じ順番の依存するファイルの名前
$* : サフィックスを除いたターゲットの名前

一般規則

%.拡張子で一般的な規則を記述可能。

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

サフィックスルール

単に「.cファイルから.oファイルの拡張子に変換する」といったルールの場合は、以下のようにも書ける。

.c.o:
    $(CC) -c $< -o $@

ただし、これは互換性のために残された機能で、使うべきではない。

さらには、これは.SUFFIXES変数に登録された拡張子しかサフィックスとして扱わない。 自前で登録するには、

#.SUFFIXES:   ←空の.SUFFIXESを一旦定義することで既存のサフィックスを削除可能
.SUFFIXES: .c .o

暗黙のルール

Makefileには定義しなくてもデフォルトのルールがいくつか用意されている。例えば、

.c.o:
    $(CC) -c $< -o $@ $(CFLAGS)
.cpp.o:
    $(CXX) -c $< -o $@ $(CXXFLAGS)

など。これらを無効にするには、

$ make -r

としてmakeする。

変数操作

wildcard - ディレクトリ内のファイル検索

SRCS = $(wildcard *.c)

サフィックス置換

OBJS = $(SRCS:.c=.o)
#または
OBJS = $(patsubst %.c, %.o, $(SRCS))

addprefix - 各語にプレフィックスをつける

OBJS = $(addprefix $(STAGEDIR)/,$(SRCS:.c=.o))

参考文献

トリビアなmakefile入門

GNU make 日本語訳(Coop編) - テキスト変形関数

GNU make 日本語訳(Coop編) - 暗黙ルールの利用

Makeでヘッダファイルの依存関係に対応する - wagavulin's blog

CGIが動かないときにチェックしてほしいこと

「End of script output before headers」のエラーに遭遇したときの対処法。

ヘッダの出力

まずはエラーメッセージの内容をそのまま受け止める。

#!/usr/bin/python

print "Content-Type: text/html\n\n"
print "test"

Content-Typeのヘッダーは必須。

suexecの実行設定

suexecを使っている場合は、/var/log/secureをチェックしてエラーが出てないか確認する。

パーミッション

実行ディレクトリのパーミッションは755じゃないとだめっぽい。

$ chmod 755 /var/www/cgi-bin

必ず。

Xfceの細かい設定

スクロールしたときにアクティブウィンドウを切り替えない

Xfce で後ろのウィンドウを前面に出さずにスクロール | #Connect

「ウィンドウマネージャ(詳細)」→「アクセシビリティ」→「いずれかのマウスボタンが押されているときにウィンドウを全面に出す」チェックOFF

音量調節

sudo pacman -S pavucontrol

あとはXfceパネルにPulseAudio音量調節を追加する

電池残量をパネルに表示

「電源管理」→「システムトレイアイコン」オン

ZenBook Flip S (UX370UA)にArchLinuxを導入してみた

自分用メモ程度で。

手順

基本的には、以下の3つの記事を参考に。

Arch LinuxをUEFI + GPT環境にインストールする

ArchLinuxのインストール 1.5.yaourtのインストール編 - グレインの備忘録

ArchLinuxのインストール 2.GUI(xfce)&日本語環境構築編 - グレインの備忘録

注意点

デフォルトだとトラックパッドジェスチャーが一部しか有効になっていない。 libinputが全て制御しているので、ヘルプを参考に/etc/X11/xorg.conf.d/30-touchpad.confを編集する。

libinput - ArchWiki libinput man page - xorg-x11-drv-libinput | ManKier

自分で作ったのはこんな感じ。

Section "InputClass"
    Identifier "touchpad"
    Driver "libinput"
    MatchIsTouchpad "on"
    Option "Tapping" "on"
    Option "ClickMethod" "clickfinger"
    Option "NaturalScrolling" "true"
    Option "ScrollMethod" "twofinger"
EndSection

電源系はここに。

ノートパソコン - ArchWiki

<2018年版>Android開発環境をLinux(ArchLinux)に導入

Android SDKなどの開発環境をLinuxにインストールする。

Deprecatedになってしまったコマンドラインツール群

LinuxAndroid SDKを使う!」となれば、コマンドでガリガリ開発できるとワクワクしている人もいるだろう。実際私もかなり楽しみにしていた。

しかしながら!!!コマンドツールはdeprecatedになってしまったのである!!!

deprecatedになっただけでなく、ビルド機能などもバッサリ削除されてしまった。

f:id:grainrigi:20180106191020p:plain

従って、コマンドラインのみでAndroid開発を行うのは実質不可能となってしまった。

「For manual SDK, AVD, and project management, please use Android Studio.」というのがGoogleの方針らしい。

仕方ないのでAndroid Studio

仕方がないのでIDEを使うほかない。全く悲しい限りだ。
では簡単にインストール方法を。

Android Studioのダウンロード

公式サイトからダウンロードする。

Android Studio と SDK ツールをダウンロードする | Android Studio

Android Studioのインストール

落としたzipを展開するだけ。ただし、必ず書き込み権限のある場所に展開すること。

$ unzip android-studio-ide-171.4443003-linux.zip -d ~/android/

ここでは~/androidに展開する。

初期設定

終わったら、~/android/android-studio/bin/studio.shを実行。すると、IDEが立ち上がる。

UIのスタイルやSDKのインストール先を聞かれるのでウィザードに従ってすすめる。

ここでは~/android/sdkSDKをインストールした。

プロジェクトを作ってみる

終わると下のような画面が出る。

f:id:grainrigi:20180106235832p:plain

試しにプロジェクトを作ってみよう。「Start a new Android Project」を選択する。

とりあえず全てデフォルトで作ってみた。

f:id:grainrigi:20180107000106p:plain

ところが、いきなり下側にエラーが出ている。

f:id:grainrigi:20180107000131p:plain

自動でインストールされたSDKAPI Versionが27なのに、指定されているバージョンが26であるのが原因の模様。

「app/build.gradle」を編集する。

以下のように「compileSdkVersion」と「targetSdkVersion」を「27」に変える。

f:id:grainrigi:20180107000821p:plain

さらに、忘れてはいけないのはビルドツールのバージョンをSDKバージョンと揃えることだ。

以下のように「buildToolsVersion」を「27.0.3」に、サポートライブラリのバージョンを「27.0.2」にする。

f:id:grainrigi:20180107001359p:plain

これでビルド(Make Project)してみると、特に失敗すること無く終わる。

試しに実行…ところが

試しに実行してみよう…と思うと、なんと「Run」ボタンがグレーアウトしてしまっている。

これは、GradleプロジェクトがAndroidStudioに認識されていないことが原因らしい。

右ペインから「Gradle」ウィンドウを開き、「Refresh all Gradle Project」(更新ボタン)を押す。

f:id:grainrigi:20180107002235p:plain

さらに、メニューの「Tools」→「Android」→「Sync Project with Gradle Files」を押す。

すると、Runボタンが押せるようになる。

AVDの作成も一苦労

実機がある場合はあとはUSB接続からのUSBデバッグ許可でデバッガなどが使えるようになる。

ここではエミュレーターを使ってみよう。

Runボタンを押すと「Select Deployment Target」というウィンドウが出てくるが、右下に「Create New Virtual Machine」というボタンがあるので押す。

ハードウェア、システムイメージは自分の必要に合わせて選択する。(NDKを利用する場合でもエミュレータx86のもので構わない。)

最後が重要で、「Emulated Performance」を「Software - GLES 1.1」にしなければ動かないことがある。(当方ではHardwareにするとSEGVで落ちた。)

f:id:grainrigi:20180107003214p:plain

これでエミュレータを試しに起動してみると、エラーが出て動かない。

EventLogを見てみると、ドライバのロードに失敗している模様。

調べたら解決法があった。

qiita.com

これで起動するようになった。

まとめ

コマンドラインで開発できないのは残念だった上に、IDEを動かすにも何かと手間がかかったりと、すっかりAndroidStudioが嫌いになってしまった。 IDEを推進するならはじめからうまく動いてほしいものだ。(ここまでたどり着くのに2時間くらいかかった)

wineでフォントが汚い場合の対策

wineを入れたはいいものの、どうにもフォントが汚い。

アンチエイリアスがまるでかかっていないようだ。

スムージングの設定の問題?

スムージングが設定できてないのかと思って、やってみた。

mattintosh.blog.so-net.ne.jp

しかし、全く効果はない。

Xftの問題?

調べたら、あるエントリに行き当たった。

WineHQ Forums • View topic - Font anti-aliasing does not work...

どうやら、xftの設定の一部を消せばいいらしい。

$ xrdb -query | grep -vE 'Xft\.(anti|hint|rgba)' | xrdb

これを実行したらフォントがきれいになった。理由はよくわからない。