20201227のMacに関する記事は8件です。

Qiitaでスクリーンショットを効率よく貼る方法

あらすじ

Qiitaで」と書きましたが、汎用的に使えるようにまとめました。
誰かから「スクショってどうやる?」って聞かれたとき用の記事です。

この記事の目玉は最後の表です。
表にすると見やすいですね。
Win・Mac両対応です。

Windows 10

昔からある方法では、PrintScreenで全画面スクリーンショットでした。また、ウィンドウごとにスクリーンショットを撮りたい時には、Alt+PrintScreenです。

モダンな方法は?というとWin+Shift+sです。このショートカットで「スケッチ & 切り取り」アプリが起動します。

image.png

Windows10に標準で同梱のアプリなので必ず使えます。Macで言う「スクリーンショット」アプリですね。

前は「Snipping Tool」という名称のアプリでしたが、UWPのストアアプリとなって名前が変わったようですね。見た目もカッコよくなり、丸く切り取ったりもできてステキです。

「スケッチ & 切り取り」の設定はデフォルトで下記のような設定になっています。この中で気になるものがある場合には、スタートメニューから「スケッチ & 切り取り」を探して起動し、設定を開いて変更してみてください。

image.png

また、スクリーンショットの履歴を残したかったり、毎回ファイルに保存された方が都合がいいこともあります。そんな時は、OneDriveの設定を確認してみてください。下記のように「作成したスクリーンショットをOneDriveに自動的に保存する」という項目があります。
image.png

Mac OS

Command+Shift+4で矩形選択のスクリーンショットをとることができます。
また、Command+Shift+3だと全画面のスクリーンショットです。

これだとウィンドウのスクリーンショットの撮り方のバリエーションが少ないです。
そこでCommand+Shift+5の出番です。これにより、「スクリーンショット」というアプリが起動します。
image.png
この「スクリーンショット」はMacに標準で同梱のアプリです。Winで言う「スケッチ & 切り取り」みたいなものです。

しかし、上記のショートカットだけでは、画像ファイルが作成されるだけなので困っていました。

  1. Qiita記事を編集中にスクショを貼りたいと思う
  2. 他のウィンドウに移る
  3. スクショを取る
  4. Qiita記事に戻る
  5. 画像選択ボタンを押す
  6. 画像を選ぶ
  7. Qiita記事の続きを書き進める

4と5を減らして、サボりたかったワケです。

いろいろ調べているとControlキーが重要だということがわかってきました。
どうやら、MacではControlを押しながらだと、クリップボードにコピーされるみたいです。

具体的にどうするといいのか下記の表にまとめました。

表で整理

OS ターゲット 送り先 ショートカット
Mac 全画面 :clipboard: クリップボード Command+Shift+3+Ctrl
Mac 矩形 :clipboard: クリップボード Command+Shift+4Ctrl+クリック
Mac 全画面 :file: 画像ファイル Command+Shift+3
Mac 矩形 :file: 画像ファイル Command+Shift+4
Mac 前回指定1 :clipboard: クリップボード Command+Shift+5Ctrl+クリック
Mac 前回指定1 :file: 画像ファイル Command+Shift+5クリック
Win 全画面 :clipboard: クリップボード PrintScreen
Win ウィンドウ :clipboard: クリップボード Alt+PrintScreen
Win 前回指定1 :clipboard: クリップボード Win+Shift+s

まとめ

自分的に、記事をまとめながらOSを比較してみることで、「こういう差異が生まれるんだね。」とか知見が高まりました。自分がUIを作るときなどにも役に立つ、いい体験ですね。今後も定期的に、こういった記事を書こうかなと思います。

Excelsior!


  1. 前回指定とは、「前回スクリーンショットしたときの範囲」をOSが記憶していて、それを指定するということです。 

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Mac でキーボードに不具合が起きた時の対処方法【応急処置】

結論

から言うと、以下の記事
Macに原因不明の不具合が起きたら「SMCリセット」のやり方(2) -- あわてないよう「SMCリセット」について知っておこう
の、「レベル1」の作業で改善しました。

追記 - 12月27日(日)

実行した後、一時的には改善したものの、1時間ほど使っていて直ぐに再発しました。
(再発したとは言え、多少はマシになった印象があるので、試してみる価値はありそうです)
その後、「レベル2」の方法を試しました。
厳密には、Apple 公式の SMC リセット方法(以下の記事)が正しいようです。
Mac の SMC をリセットする方法
また、後日、状況を追記します。

経緯

ここ2ヶ月ほど、使用している Mac の「N」キーに不具合があり、思うような入力ができず、使用率も高いので困っていました。

調べてみると、公式に修正プログラムが用意されている(こちら→ https://support.apple.com/ja-jp/keyboard-service-program-for-mac-notebooks )不具合に類似していました。

が、修理に数日〜1週間かかるようなので、余裕がなく迷っていたのですが、同様にお困りの方も、まずは上記の方法を試してみるといいかもしれません。

ちなみに、

『SMCは「System Management Controller」の頭文字をとった略語だ。(中略)Intel製のプロセッサーを搭載したMacが装備するもので、Macのハードウェアの中でも、主に電源周りを管理する役割を担っている。』(引用)

だそうです。

今後の対策

原因については、正確にはわからないのですが、僕の例で考えられるのは、OSのアップデート、ソフト(Docker?)のインストール辺りです。一度、Docker for Mac を使用した影響?と思われるエラーが kernel で起きたのを覚えていて、その辺りを少し疑っています。

いずれにしても、一番可能性が高いのは、OSのアップデート(Big Sur version 11.0.1)ですね。

色々なツールを試すことが多いのですが、ほとんど記録を取っていなかったので、今後は、しっかり作業記録を取ろうと思います。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Big Surでライブラリのパスが通ってなくてコンパイルエラーが出る

環境

  • macOS Big Sur 11.1
  • MacBook Air (M1, 2020)
  • Command Line Tools 12.3
  • Rosetta 2 使用
  • homebrewで入れたgcc (gfortran)

コンパイルエラー

gfortranを使ってfortranのプログラムをコンパイルしようとしたら下記のエラー

ld: library not found for -lSystem

この辺りをみると
https://community.intel.com/t5/Intel-Fortran-Compiler/New-macOS-Big-Sur-return-quot-ld-library-not-found-for-lSystem/m-p/1228382/highlight/true?profile.language=ja

Big Surではなぜかライブラリにパスが通ってないらしい.gfortranだけではなくgccなどでも同じエラーが出る.
めんどくさいが,コンパイルするときにライブラリのパスを指定する.

-L/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib

これでコンパイルできた.

LAPACK

MacではBLASやLAPACKはデフォルトでAccelerate frameworkに含まれていて,これまでのMac OSでは確か何もしなくてもデフォルトでパスが通ってLAPACKなどが使えたはず.Big Surでは上記問題で

-llapack

だけではコンパイルできなかった.

-L/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib -llapack

パスを指定すればLAPACKが使えてコンパイルが通った.

ライブラリの実態?

/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/libを調べてみるとliblapack.tbdというファイルがあって中身を見ると,

install-name:    '/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLAPACK.dylib'

ライブラリが置いてある実際の場所が書いてある.この場所を見に行ってみてもlibLAPACK.dylibというライブラリが見つからない.Big Surより前のOSでは確かにこの場所にLAPACKとかBLASのライブラリが置いてある.以前のOSではそれらのライブラリのシンボリックリンクが/usr/libに置いてあった./usr/libは何も設定しなくてもライブラリを読みに行ってくれるディレクトリだったはず.

Big Surでライブラリファイルが見つからないのになぜかコンパイルはうまく行って,できた実行ファイルをotool -Lで調べてみると下記のlibLAPACK.dylibがリンクされている.

/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLAPACK.dylib

ファイルがないのにちゃんと動いているのが謎.

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MacでのGCCのコンパイルエラーの対処法を詳細に解説する

[1]前書き

この記事はMacでGCCを"正しく"環境構築しよう!の続編なので、先に読んでからこちらの記事を読むことをお勧めします。手順通りに進めていただければGCCを使えるはずです1

この記事では、HomebrewでインストールしたGCCでコンパイルしようとすると、fatal error: '〇〇.h' file not foundとエラーが出る場合の対応策について紹介します。

また、GCC以外の場面でfatal error: '〇〇.h' file not foundのエラーが出た場合も紹介した方法を応用することで問題を解決することができるような解説を以下では心がけています。

[2]前提

まず、GCCが使える状態になっていることを以下のコマンドで確認します。バージョンの違いはありますが、一番下の行がHomebrew GCCになっていればHomebrewのGCCが使える状態になっています。異なる場合はMacでGCCを"正しく"環境構築しよう!を先に読んでください。

% g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/local/Cellar/gcc/10.2.0/libexec/gcc/x86_64-apple-darwin20/10.2.0/lto-wrapper
Target: x86_64-apple-darwin20
Configured with: ../configure --build=x86_64-apple-darwin20 --prefix=/usr/local/Cellar/gcc/10.2.0 --libdir=/usr/local/Cellar/gcc/10.2.0/lib/gcc/10 --disable-nls --enable-checking=release --enable-languages=c,c++,objc,obj-c++,fortran --program-suffix=-10 --with-gmp=/usr/local/opt/gmp --with-mpfr=/usr/local/opt/mpfr --with-mpc=/usr/local/opt/libmpc --with-isl=/usr/local/opt/isl --with-system-zlib --with-pkgversion='Homebrew GCC 10.2.0' --with-bugurl=https://github.com/Homebrew/homebrew-core/issues --disable-multilib --with-native-system-header-dir=/usr/include --with-sysroot=/Library/Developer/CommandLineTools/SDKs/MacOSX11.0.sdk SED=/usr/bin/sed
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 10.2.0 (Homebrew GCC 10.2.0) 

[3]サーチパスの確認と〇〇.hの検索

file not foundへの対処を見れば基本的には解決するので、この章を読むのは必須ではありません。但し、解決しない場合に自力で解決するのにこの章は役立つと期待しています

(1)原因の確認

fatal error: '〇〇.h' file not found〇〇.h(ヘッダファイル)が見つからないことが原因です。まずはヘッダファイルのインクルード元を見つけるためにサーチパスを確認しましょう

サーチパスは適当なC++のファイル(hoge.cc)を用意して-vオプション付きでコンパイル(% g++ -v hoge.cc2)した時の出力の中にあります3。また、自分の出力結果の該当部分のみを参考に載せておきます4

つまり、以下のサーチしているディレクトリに〇〇.hがない場合にfatal error: '〇〇.h' file not foundというエラーが発生します。

% g++ -v hoge.cc
#その他の出力
ignoring nonexistent directory "/Library/Developer/CommandLineTools/SDKs/MacOSX11.0.sdk/usr/local/include"
ignoring nonexistent directory "/usr/local/Cellar/gcc/10.2.0/lib/gcc/10/gcc/x86_64-apple-darwin20/10.2.0/../../../../../../x86_64-apple-darwin20/include"
ignoring nonexistent directory "/Library/Developer/CommandLineTools/SDKs/MacOSX11.0.sdk/Library/Frameworks"
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/Cellar/gcc/10.2.0/lib/gcc/10/gcc/x86_64-apple-darwin20/10.2.0/../../../../../../include/c++/10.2.0
 /usr/local/Cellar/gcc/10.2.0/lib/gcc/10/gcc/x86_64-apple-darwin20/10.2.0/../../../../../../include/c++/10.2.0/x86_64-apple-darwin20
 /usr/local/Cellar/gcc/10.2.0/lib/gcc/10/gcc/x86_64-apple-darwin20/10.2.0/../../../../../../include/c++/10.2.0/backward
 /usr/local/Cellar/gcc/10.2.0/lib/gcc/10/gcc/x86_64-apple-darwin20/10.2.0/include
 /usr/local/Cellar/gcc/10.2.0/lib/gcc/10/gcc/x86_64-apple-darwin20/10.2.0/include-fixed
 /Library/Developer/CommandLineTools/SDKs/MacOSX11.0.sdk/usr/include
 /Library/Developer/CommandLineTools/SDKs/MacOSX11.0.sdk/System/Library/Frameworks
End of search list.
#その他の出力

ちなみに、Macに元々あるclang++のサーチパスは以下のようになりました。

% clang++ -v hoge.cc
#その他の出力
ignoring nonexistent directory "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/local/include"
ignoring nonexistent directory "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/Library/Frameworks"
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/include
 /Library/Developer/CommandLineTools/usr/bin/../include/c++/v1
 /Library/Developer/CommandLineTools/usr/lib/clang/12.0.0/include
 /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include
 /Library/Developer/CommandLineTools/usr/include
 /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks (framework directory)
End of search list.
#その他の出力

(2)サーチパスの詳細

サーチパスはシステム側で決められています5。自分の環境を含む複数の環境で確かめた限りでは、HomebrewでインストールしたGCC(/usr/local/Cellar/gcc/10.2.0/)の配下とCommandLineToolsの一部としてインストールされるMacOSXのSDK6(/Library/Developer/CommandLineTools/SDKs/MacOSX11.0.sdk/)の配下のヘッダファイルを含むディレクトリを指します7

(3)〇〇.hの検索

サーチパスを把握し出力をメモしたらlocateコマンドを用いて〇〇.hを探します。

同様の検索用のコマンドのfindコマンドもありますが、ここでは高速なlocateコマンドの利用を推奨します。Macでのlocateコマンドの使い方は環境構築で最も役に立ったlocateコマンドを紹介するを参考にしてください。

例えば、fatal error: 'wchar.h' file not foundとなる場合、自分の環境でwchar.hを探すと以下のようになります。

% locate /wchar.h
/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include/wchar.h
/Library/Developer/CommandLineTools/SDKs/MacOSX11.0.sdk/usr/include/wchar.h
/Library/Developer/CommandLineTools/usr/include/c++/v1/wchar.h
/usr/local/Cellar/gcc/10.2.0/include/c++/10.2.0/tr1/wchar.h

[4]file not foundへの対処

まず、MacでGCCを"正しく"環境構築しよう!の内容を完遂すれば、HomebrewでインストールしたGCCの配下のヘッダファイルは普通はインクルードできます。従って、MacOSのSDKの配下のヘッダファイルがインクルードできていないと考えられます。

具体的には以下の手順で実行を行い、その都度エラーが消えるかを確認してください。

(1)CommandLineTollsの確認

まず、CommandLineToolsに問題がないかを確認しましょう。具体的な手順は「MacでGCCを"正しく"環境構築しよう!」の[1]に書いてあります。

(2)SDKの確認

次は、インストールすべきSDKが異なる場合があるので確認しましょう。% g++ -vを実行し、出力の中の--with-sysrootオプションの指すディレクトリを確認してください。自分であれば/Library/Developer/CommandLineTools/SDKs/MacOSX11.0.sdkとなっています。

実は、--with-sysrootオプションで指定されたMacOSのSDKの配下からヘッダファイルがインクルードされます8。従って、SDKのバージョンの合うCommandLineToolsをインストールしてください。SDKのバージョンの合うCommandLineToolsのインストール方法については「MacでGCCを"正しく"環境構築しよう!」の[1]の(2)を参考にしてください。

(3)-sysrootオプションでの指定

(2)まででうまくいかない場合や最新のSDKを使いたい場合は用いるSDKをコンパイル時のオプションで指定します。インストール済みのSDKを% ls /Library/Developer/CommandLineTools/SDKsで調べ、使いたいSDKを-sysrootオプションで指定すれば良いです9

オプションとして-sysrootオプションのみを使うと、以下のようなコマンドになると思います。

% g++ -syroot=/Library/Developer/CommandLineTools/SDKs/〇〇.sdk hoge.cc

以上を正確に行ってもうまくいかない場合は他の問題が発生してるので、自分で対処方法を考えるか検索してください10

[5]C++のサンプルファイル(hoge.cc)

何回か出てくるhoge.ccを載せておきます。〇〇.hをインクルードして終了するだけのソースファイルです。〇〇.hは適当に置き換えてください。

hoge.cc
#include<〇〇.h>
int main(){
    return 0;
}

  1. この記事でかなり網羅してあると思うので、うまくいかない場合は一つ一つの手順を完遂できているかということに着目してデバッグしてください。 

  2. これ以降、% コマンド名で実行するコマンドを示します。シェルによっては%$ですが、適宜読み替えてください。 

  3. GCCのドキュメントのサーチパスに書いてあります。 

  4. ignoring nonexistent directoryは存在しないディレクトリにもサーチパスが通っていることを表します。 

  5. 調査してもわからなかったので、設定ファイルの場所がわかる方は教えていただきたいです。 

  6. MaxOSXをターゲットプラットフォームとしたC++アプリケーションの開発に必要な一連のファイルが含まれています。詳しくは[SDK マネージャ]を参考にすると良いです。 

  7. バージョンなどが環境により少し異なる可能性があることに注意してください。また、GCCもSDKも複数ある場合は気をつけてください。 

  8. 設定ファイルを書き換えて--with-sysrootのデフォルトを直接書き換えようと思ったのですが、わかりませんでした。teratailで質問しているので、有識者の方はこちらのコメント欄またはteratailで教えていただけるとありがたいです。 

  9. /Library/Developer/CommandLineTools/SDKs/MacOSX.sdkというバージョン名のついていないSDKがある場合、% ls -l /Library/Developer/CommandLineTools/SDKs/MacOSX.sdkで確認してわかるようにシンボリックリンクになります。リンク先が正しければこちらを指定しても問題ありません。 

  10. コメントをいただけると反応できるかもしれません。 

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MacでGCCのコンパイルを"正しく"通そう!

[1]前書き

この記事はMacでGCCを"正しく"環境構築しよう!の続編なので、先に読んでからこちらの記事を読むことをお勧めします。手順通りに進めていただければGCCを使えるはずです1

この記事では、HomebrewでインストールしたGCCでコンパイルしようとすると、fatal error: '〇〇.h' file not foundとエラーが出る場合の対応策について紹介します。

また、GCC以外の場面でfatal error: '〇〇.h' file not foundのエラーが出た場合も紹介した方法を応用することで問題を解決することができるような解説を以下では心がけています。

[2]前提

まず、GCCが使える状態になっていることを以下のコマンドで確認します。バージョンの違いはありますが、一番下の行がHomebrew GCCになっていればHomebrewのGCCが使える状態になっています。異なる場合はMacでGCCを"正しく"環境構築しよう!を先に読んでください。

% g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/local/Cellar/gcc/10.2.0/libexec/gcc/x86_64-apple-darwin20/10.2.0/lto-wrapper
Target: x86_64-apple-darwin20
Configured with: ../configure --build=x86_64-apple-darwin20 --prefix=/usr/local/Cellar/gcc/10.2.0 --libdir=/usr/local/Cellar/gcc/10.2.0/lib/gcc/10 --disable-nls --enable-checking=release --enable-languages=c,c++,objc,obj-c++,fortran --program-suffix=-10 --with-gmp=/usr/local/opt/gmp --with-mpfr=/usr/local/opt/mpfr --with-mpc=/usr/local/opt/libmpc --with-isl=/usr/local/opt/isl --with-system-zlib --with-pkgversion='Homebrew GCC 10.2.0' --with-bugurl=https://github.com/Homebrew/homebrew-core/issues --disable-multilib --with-native-system-header-dir=/usr/include --with-sysroot=/Library/Developer/CommandLineTools/SDKs/MacOSX11.0.sdk SED=/usr/bin/sed
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 10.2.0 (Homebrew GCC 10.2.0) 

[3]サーチパスの確認と〇〇.hの検索

file not foundへの対処を見れば基本的には解決するので、この章を読むのは必須ではありません。但し、解決しない場合に自力で解決するのにこの章は役立つと期待しています

(1)原因の確認

fatal error: '〇〇.h' file not found〇〇.h(ヘッダファイル)が見つからないことが原因です。まずはヘッダファイルのインクルード元を見つけるためにサーチパスを確認しましょう

サーチパスは適当なC++のファイル(hoge.cc)を用意して-vオプション付きでコンパイル(% g++ -v hoge.cc2)した時の出力の中にあります3。また、自分の出力結果の該当部分のみを参考に載せておきます4

つまり、以下のサーチしているディレクトリに〇〇.hがない場合にfatal error: '〇〇.h' file not foundというエラーが発生します。

% g++ -v hoge.cc
#その他の出力
ignoring nonexistent directory "/Library/Developer/CommandLineTools/SDKs/MacOSX11.0.sdk/usr/local/include"
ignoring nonexistent directory "/usr/local/Cellar/gcc/10.2.0/lib/gcc/10/gcc/x86_64-apple-darwin20/10.2.0/../../../../../../x86_64-apple-darwin20/include"
ignoring nonexistent directory "/Library/Developer/CommandLineTools/SDKs/MacOSX11.0.sdk/Library/Frameworks"
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/Cellar/gcc/10.2.0/lib/gcc/10/gcc/x86_64-apple-darwin20/10.2.0/../../../../../../include/c++/10.2.0
 /usr/local/Cellar/gcc/10.2.0/lib/gcc/10/gcc/x86_64-apple-darwin20/10.2.0/../../../../../../include/c++/10.2.0/x86_64-apple-darwin20
 /usr/local/Cellar/gcc/10.2.0/lib/gcc/10/gcc/x86_64-apple-darwin20/10.2.0/../../../../../../include/c++/10.2.0/backward
 /usr/local/Cellar/gcc/10.2.0/lib/gcc/10/gcc/x86_64-apple-darwin20/10.2.0/include
 /usr/local/Cellar/gcc/10.2.0/lib/gcc/10/gcc/x86_64-apple-darwin20/10.2.0/include-fixed
 /Library/Developer/CommandLineTools/SDKs/MacOSX11.0.sdk/usr/include
 /Library/Developer/CommandLineTools/SDKs/MacOSX11.0.sdk/System/Library/Frameworks
End of search list.
#その他の出力

ちなみに、Macに元々あるclang++のサーチパスは以下のようになりました。

% clang++ -v hoge.cc
#その他の出力
ignoring nonexistent directory "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/local/include"
ignoring nonexistent directory "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/Library/Frameworks"
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/include
 /Library/Developer/CommandLineTools/usr/bin/../include/c++/v1
 /Library/Developer/CommandLineTools/usr/lib/clang/12.0.0/include
 /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include
 /Library/Developer/CommandLineTools/usr/include
 /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks (framework directory)
End of search list.
#その他の出力

(2)サーチパスの詳細

サーチパスはシステム側で決められています5。自分の環境を含む複数の環境で確かめた限りでは、HomebrewでインストールしたGCC(/usr/local/Cellar/gcc/10.2.0/)の配下とCommandLineToolsの一部としてインストールされるMacOSXのSDK6(/Library/Developer/CommandLineTools/SDKs/MacOSX11.0.sdk/)の配下のヘッダファイルを含むディレクトリを指します7

(3)〇〇.hの検索

サーチパスを把握し出力をメモしたらlocateコマンドを用いて〇〇.hを探します。

同様の検索用のコマンドのfindコマンドもありますが、ここでは高速なlocateコマンドの利用を推奨します。Macでのlocateコマンドの使い方は環境構築で最も役に立ったlocateコマンドを紹介するを参考にしてください。

例えば、fatal error: 'wchar.h' file not foundとなる場合、自分の環境でwchar.hを探すと以下のようになります。

% locate /wchar.h
/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include/wchar.h
/Library/Developer/CommandLineTools/SDKs/MacOSX11.0.sdk/usr/include/wchar.h
/Library/Developer/CommandLineTools/usr/include/c++/v1/wchar.h
/usr/local/Cellar/gcc/10.2.0/include/c++/10.2.0/tr1/wchar.h

[4]file not foundへの対処

まず、MacでGCCを"正しく"環境構築しよう!の内容を完遂すれば、HomebrewでインストールしたGCCの配下のヘッダファイルは普通はインクルードできます。従って、MacOSのSDKの配下のヘッダファイルがインクルードできていないと考えられます。

具体的には以下の手順で実行を行い、その都度エラーが消えるかを確認してください。

(1)CommandLineTollsの確認

まず、CommandLineToolsに問題がないかを確認しましょう。具体的な手順は「MacでGCCを"正しく"環境構築しよう!」の[1]に書いてあります。

(2)SDKの確認

次は、インストールすべきSDKが異なる場合があるので確認しましょう。% g++ -vを実行し、出力の中の--with-sysrootオプションの指すディレクトリを確認してください。自分であれば/Library/Developer/CommandLineTools/SDKs/MacOSX11.0.sdkとなっています。

実は、--with-sysrootオプションで指定されたMacOSのSDKの配下からヘッダファイルがインクルードされます8。従って、SDKのバージョンの合うCommandLineToolsをインストールしてください。SDKのバージョンの合うCommandLineToolsのインストール方法については「MacでGCCを"正しく"環境構築しよう!」の[1]の(2)を参考にしてください。

(3)-sysrootオプションでの指定

(2)まででうまくいかない場合や最新のSDKを使いたい場合は用いるSDKをコンパイル時のオプションで指定します。インストール済みのSDKを% ls /Library/Developer/CommandLineTools/SDKsで調べ、使いたいSDKを-sysrootオプションで指定すれば良いです9

オプションとして-sysrootオプションのみを使うと、以下のようなコマンドになると思います。

% g++ -syroot=/Library/Developer/CommandLineTools/SDKs/〇〇.sdk hoge.cc

以上を正確に行ってもうまくいかない場合は他の問題が発生してるので、自分で対処方法を考えるか検索してください10

[5]C++のサンプルファイル(hoge.cc)

何回か出てくるhoge.ccを載せておきます。〇〇.hをインクルードして終了するだけのソースファイルです。〇〇.hは適当に置き換えてください。

hoge.cc
#include<〇〇.h>
int main(){
    return 0;
}

  1. この記事でかなり網羅してあると思うので、うまくいかない場合は一つ一つの手順を完遂できているかということに着目してデバッグしてください。 

  2. これ以降、% コマンド名で実行するコマンドを示します。シェルによっては%$ですが、適宜読み替えてください。 

  3. GCCのドキュメントのサーチパスに書いてあります。 

  4. ignoring nonexistent directoryは存在しないディレクトリにもサーチパスが通っていることを表します。 

  5. 調査してもわからなかったので、設定ファイルの場所がわかる方は教えていただきたいです。 

  6. MaxOSXをターゲットプラットフォームとしたC++アプリケーションの開発に必要な一連のファイルが含まれています。詳しくは[SDK マネージャ]を参考にすると良いです。 

  7. バージョンなどが環境により少し異なる可能性があることに注意してください。また、GCCもSDKも複数ある場合は気をつけてください。 

  8. 設定ファイルを書き換えて--with-sysrootのデフォルトを直接書き換えようと思ったのですが、わかりませんでした。teratailで質問しているので、有識者の方はこちらのコメント欄またはteratailで教えていただけるとありがたいです。 

  9. /Library/Developer/CommandLineTools/SDKs/MacOSX.sdkというバージョン名のついていないSDKがある場合、% ls -l /Library/Developer/CommandLineTools/SDKs/MacOSX.sdkで確認してわかるようにシンボリックリンクになります。リンク先が正しければこちらを指定しても問題ありません。 

  10. コメントをいただけると反応できるかもしれません。 

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

4.Mac入門〜WindowsとMacの違い

前置き

Macbookを初めて使うことになったので、自分の理解をアウトプットするために作成。
基本的にキーボードを使った操作が好きなので、タッチパッドの利用については触れない。
また気づきがあれば随時更新予定。

環境

  • macOS Big Sur 11.1
  • MacBook Pro (13-inch)

WindowsとMacの違い

WindowsユーザがMacを利用する上で戸惑う部分をまとめてみる。

各種アプリケーションのメニューの表示場所

Windowsではアクティブウィンドウの一番上にメニューが表示されるが、Macでは常に画面の上部にメニューが表示される。
個別のアプリケーションの上部にはメニューがないし、メニューを開きたいなら対象のアプリをアクティブにする必要がある。

Chromeのメニュー
Menubar_と_Notification_Center.png

Finderのメニュー
Menubar.png

システムメニュー

Windowsでは画面左下のスタートメニューからシャットダウン、再起動を行うが、Macの場合は画面左上のりんごアイコンから操作ができる。
Notification_Center.png

アプリ起動方法

Windowsではスタートメニューから対象アプリを探せるが、MacはDockのアイコンをクリックするか、Launchpadでアプリ一覧を表示して起動することができる。

Launchpadアイコン
Notification_Center.png

Launchpad起動時の画面イメージ
Notification_Center.png

また、画面右上にある虫眼鏡アイコンSpotlightで直接アプリ名を検索して起動することも可能。

操作スペース(仮想デスクトップ)の作成と操作

Windows同様、Macでも仮想デスクトップの作成ができる。
Macでは作成した仮想デスクトップを操作スペースと呼ぶ。
まず、【control】+【↑】を押すことで、Mission Controlを開く。
スクリーンショット_2020-12-27_11_38_16_png_と_Postman.png

Mission ControlのSpaceバー

各操作スペース一覧や、操作スペース追加ボタンが表示される。

Mission Controlの操作スペースエリア

作成している操作スペースの一覧が表示される。
現在表示している操作スペース上のアプリを他の操作スペースにドラッグ&ドロップで移動することも可能。
操作スペースにマウスオーバーすると×ボタンが表示され、操作スペースを削除することができる。

操作スペースの切り替え

【control】+【←】で左の操作スペース、【control】+【→】で右の操作スペースに切り替わる。

各種アプリ共通のボタン

Macのアプリの左上には共通で3色のボタンが存在する。
Qiita.png

これはマウスオーバーするとなんとなくイメージがつきやすいかもしれない。
スクリーンショット_2020_12_27_13_16.png

赤ボタン

クリックするとウィンドウを閉じる。
動作はアプリによって異なり、赤ボタンでアプリケーションを終了するアプリもあれば、ウィンドウは閉じるがプロセスは生きているアプリもある。
しっかり終了したければ赤ボタンではなく、メニューから終了するか、【⌘】+【Q】で終了させるのが良い。

黄ボタン

Windowを最小化し、Dock右のエリアに退避する。
再表示したければDockエリアに移動したアイコンをクリックすれば復活する。

緑ボタン

Windowを最大化する。
マウスオーバーの状態だと以下のメニューが表示され、左側いっぱい表示や、右側いっぱい表示など表示方法を選択できる。
スクリーンショット_2020_12_27_13_25.png

よく使う一般的なキーボードショートカットキー

MacのショーカットキーはWindowsに類似している。
Windowsの【Ctrl】が【⌘】に置き換わっているようなイメージに近い。

操作 ショートカットキー 備考
コピー 【⌘】+【C】
ペースト 【⌘】+【V】
切り取り 【⌘】+【X】
プリント 【⌘】+【P】
UNDO 【⌘】+【Z】
REDO 【⌘】+【Shift】+【Z】 Windowsの場合は【Ctrl】+【Y】
全選択 【⌘】+【A】
検索 【⌘】+【F】
保存 【⌘】+【S】
アクティブアプリ切り替え 【⌘】+【tab】 表示されているアプリの左側のアプリを選択したい場合は【⌘】+【Shift】+【tab】。
Windowsの場合は【Alt】+【tab】
全画面スクリーンショット 【⌘】+【Shift】+【3】
画面の一部スクリーンショット 【⌘】+【Shift】+【4】

右クリック

MacでもWindows用のマウスが使え、右クリックボタンでメニューが開く。
また【control】を押しながら左クリックでも右クリックメニューが開く。

最後に

結構iPhoneを使っていると、MacのUIもそこまで抵抗なく使えると思った。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

macでTimeMachineを使わずに増分バックアップする

ターゲット

・macOS Catalina 10.15.7

cronの準備

cronをフルディスクアクセスにする。
1.システム環境設定 > セキュリティとプライバシー > フルディスクアクセス を開く。
スクリーンショット 2020-12-27 12.18.27.png

2.ロックを解除し、「+」ボタンをクリックする。
3.[⌘ command] + [shift] + [G]を押下し、「/usr/sbin/cron」へ移動する。
スクリーンショット 2020-12-27 12.24.33.png

4.「cron」が選択されていることを確認し、「開く」をクリックする。
スクリーンショット 2020-12-27 12.27.14.png

5.cronが追加されるので、チェックを入れる。
スクリーンショット 2020-12-27 12.28.29.png

コピー用のスクリプトを作成

手元の環境では、「/Volumes/Cam1」を「/Volumes/Cam1_Backup」にコピーする。
スクリプトはこんな感じ(ファイル名は任意)。

cam1_backup.sh
#!/bin/zsh

echo `date`" Executed Cam1 backup."
/usr/bin/osascript -e 'display notification "Running Cam1 backup." with title "Start Cam1 Backup."'
cp -r -n /Volumes/Cam1/* /Volumes/Cam1_Backup
echo "Finished Cam1 backup."
/usr/bin/osascript -e 'display notification "Finished Cam1 backup." with title "Finished Cam1 Backup."'
echo "========================================================"

コードの説明 その1

以下のコードは、デスクトップに通知を出すコード。

/usr/bin/osascript -e 'display notification "Running Cam1 backup." with title "Start Cam1 Backup."'

こんなの
スクリーンショット 2020-12-27 12.36.26.png

コード説明 その2

コピーコマンドについて。

cp -r -n /Volumes/Cam1/* /Volumes/Cam1_Backup
#cp -r(再帰的に実行) -n(新しい項目のみコピー) /Volumes/Cam1/*(コピー元ディレクトリ) /Volumes/Cam1_Backup(コピー先ディレクトリ)

cronの設定

前項で作ったスクリプトを適当なディレクトリに保存。
今回は以下の場所に保存した。

/Users/masato/cam_backup1.sh

ターミナルを開いて「crontab -e」を入力しreturn
開いたエディタに以下を入力する。今回は毎日23時に実行する。

0 23 * * * /bin/zsh /Users/masato/cam1_backup.sh>>/Users/masato/cam1_backup.log

実行時にスクリプトのechoコマンドで出力した文字列を、/Users/masato/cam1_backup.logファイルに追加していく。
cam1_backup.logはこんな感じ。

cam1_backup.log
Tue Dec 22 23:00:00 JST 2020 Executed Cam1 backup.
Finished Cam1 backup.
========================================================
Wed Dec 23 23:00:00 JST 2020 Executed Cam1 backup.
Finished Cam1 backup.
========================================================
Thu Dec 24 23:00:00 JST 2020 Executed Cam1 backup.
Finished Cam1 backup.
========================================================
Fri Dec 25 23:00:00 JST 2020 Executed Cam1 backup.
Finished Cam1 backup.
========================================================
Sat Dec 26 23:00:00 JST 2020 Executed Cam1 backup.
Finished Cam1 backup.
========================================================

完成

これで定期実行されるバックアップの設定ができた。

引用元

macOS 10.15 catalina で crontab を使用する
コマンドでMacの画面に通知ダイアログを出す

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

3.Mac入門〜画面編(ディスプレイ設定)

前置き

Macbookを初めて使うことになったので、自分の理解をアウトプットするために作成。

環境

  • macOS Big Sur 11.1
  • MacBook Pro (13-inch)
  • デュアルディスプレイ用モニタ BenQ GW2480

ディスプレイ設定画面の表示

画面のAppleアイコン⇨「システム環境設定」⇨「ディスプレイ」を選択する。
システム環境設定.png

ディスプレイの設定画面

MacBook Pro (13-inch)の設定

内蔵Retinaディスプレイ.png
解像度や文字の大きさの調整ができる。

外部ディスプレイでの設定

接続ディスプレイによって設定画面の表示が異なる。
BenQ_GW2480.png

デュアルディスプレイ設定

ケーブルでつないでデュアルディスプレイにしたときの位置関係を調整することができる。
2つの画面に同じ内容を表示することができるし、拡張も可能。
2つの画面に同じ内容を表示する場合は、「ディスプレイをミラーリング」にチェックを入れる。
BenQ_GW2480.png

ディスプレイを拡張したい場合は、外部ディスプレイと内蔵ディスプレイの位置関係を調整する。
ディスプレイの絵の部分をドラッグして位置関係を調整できる。
BenQ_GW2480.png

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む