2020-04-14

cmake: makeがインストールされていないときのエラー

CentOS 8にて、CMakeを実行すると、以下のエラーが出て、(最後のエラーだけを見ていて) なかなか解決出来なかったので、メモしておく。
CMake Error: CMake was unable to find a build program corresponding to "Unix Makefiles".  CMAKE_MAKE_PROGRAM is not set.  You probably need to select a different build tool.
CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage

原因はmakeがインストールされていないことだったので、以下のコマンドで解決した。

sudo dnf install make

2020-04-09

cmake - makeでコマンドを表示するようにする

CMakeで生成したMakefileは、デフォルトではコマンドを表示せず、進捗をパーセンテージで出す。問題なくビルドが完了する場合は良いが、どこかで失敗したときにデバッグで困る。

<p/>
CMakeが生成したMakefileには以下の記述があるため、コマンドが表示されないようになっている。
<pre>
$(VERBOSE).SILENT:
</pre>
従って、VERBOSEに何か適当な文字を設定すれば、コマンドが表示されるようになる。
<pre>
$ make VERBOSE=1
</pre>

2020-04-04

Git-clone ストレージ容量の削減

Git-cloneをつかうと、すべての履歴がコピーされるため、時間がかかるし、ストレージ容量をかなり消費する。 クローン元に応じて2種類の方法により消費するストレージを削減することができる。

ハードリンク - 同じファイルシステムからクローンする場合

同じファイルシステムからクローンする場合、.git/objects下のデータをハードリンクで作成することで、時間・容量を減らせる。
git clone --local repository [directory]
objectsのファイルは、一度作成されると中身が書き換えられることはないので、特に使用する上で制約はないはずだ。 Git-fetchで新しいコミットを取り込んだ場合は、新しいファイルが作成されるようだ。 また、元のrepositoryでgit-gcを使った場合など、ハードリンクが切れて、消費する容量は大きくなる可能性がある。

浅いクローンをつくる - 外部のURLからクローンする場合

他のファイルシステムや外部のURL (git://...など) からクローンする場合、--depthオプションで浅いクローンを作ることで時間・容量を節約できる。
git clone --depth 1 repository [directory]
もしローカルのレポジトリからクローンする場合、file://を前につけないと、--depthオプションが無視されてそのままクローンが開始されてしまう。

浅いクローンでは、変更履歴が取得されないので、履歴を遡るような用途には使用できない。 もし後で履歴が必要になった場合、git fetchで取得することができる。

もともと、何かのプロジェクトのソースを探していたらgit clone --depthで取得する方法が書かれていてこの方法を見つけたのだが、 git clone --depthについては以下のサイトにわかりやすく書かれている。

RHEL7にFedora 30のchroot環境をつくる

  1. まずディレクトリをつくる
    sudo mkdir -p /opt/chroot/fedora30/var/lib/rpm
    sudo rpm --root /opt/chroot/fedora30/var/lib/rpm --initdb
    
  2. パッケージをインストールする
    wget ftp://ftp.jaist.ac.jp/pub/Linux/Fedora/releases/30/Everything/x86_64/os/Packages/f/fedora-release-30-1.noarch.rpm
    wget ftp://ftp.jaist.ac.jp/pub/Linux/Fedora/releases/30/Everything/x86_64/os/Packages/f/fedora-release-common-30-1.noarch.rpm
    wget ftp://ftp.jaist.ac.jp/pub/Linux/Fedora/releases/30/Everything/x86_64/os/Packages/f/fedora-repos-30-1.noarch.rpm
    wget ftp://ftp.jaist.ac.jp/pub/Linux/Fedora/releases/30/Everything/x86_64/os/Packages/f/fedora-gpg-keys-30-1.noarch.rpm
    sudo rpm --root /opt/chroot/fedora30 --nodeps -ivh fedora-release-30-1.noarch.rpm fedora-release-common-30-1.noarch.rpm fedora-repos-30-1.noarch.rpm fedora-gpg-keys-30-1.noarch.rpm
    
  3. 必要となる設定ファイルをつくる
    sudo mkdir -p /opt/chroot/fedora30/{dev,etc}
    sudo cp -a /dev/{null,stderr,stdout,stdin,zero,random,urandom} /opt/chroot/fedora30/dev/
    sudo cp /etc/{resolv.conf,localtime} /opt/chroot/fedora30/etc/
    
  4. yumでbashとdnfをインストールする
    sudo yum --nogpgcheck --installroot=/opt/chroot/fedora30/ install bash dnf
    
  5. chrootして、他のパッケージをインストールする
    sudo chroot /opt/chroot/fedora30/
    dnf install packages...