管理してる人kabineko永遠の底辺IT土方。${SOURCES})だいたいCMakeLists.txtを書くとき、こんな感じで「こっから下の階層にあるCファイルを全部ビルド対象に追加しといてねー!シクヨロー!」ってやってるのだけれども、厄介なことにビルド対象から外さないかんソースコードが混ざってるのを忘れてて、ビルドがズッコケちゃう事がある。具体的に言うと、下記のような書き方されてる困ったちゃん。"nanigashi.c"ちなみに、この「nanigashi.c」は他のCソースからincludeされる前提で書かれてるので、単体でコンパイルすると無慈悲に死ぬ。「ビルドしないんだったらヘッダにしとけばいいじゃん?」と思いはするのだが、古から伝わるソースコードだからおいそれと弄れないのよね。っ、べつに改造ミスったときに責任負いたくないとかそんなことないんだからね!勘違いしないでよね!まあ愚痴ってても始まらないので、例のソースをビルド対象から除外する某をCMakeで表現する手段を講じてみよう。この手の案件は基本的に日本語だとあんま情報出てこないので、いつものStackOverFlowとGoogle翻訳の黄金コンビでなんとかしてやろうじゃねえの。現在の推奨は後者らしいのだが、俺の場合わりと小規模なプロジェクト作ることが多いし、引数多いと面倒なので前者を使ってたりする。${SOURCES})で、どちらを使うにせよ、予め洗い出しておいたinclude対象パスの一覧をテキトーなリスト(上記で言うところのINCLUDE_DIRS)に入れて渡してやる感じになる。色々なディレクトリに参照したいヘッダファイルが散乱してる場合、includeディレクトリを手動で洗い出すのが面倒だ。可能であれば、「ヘッダファイルが入ってるディレクトリ」を勝手に走査して、勝手にリストにぶちこんでほしい。それを外部スクリプトで書いて環境変数にぶちこむのもなんか嫌だし、CMakeLists.txtの中だけで完結させたい。コメントを残すSVGで自作フォント使ってHTMLで読み込む世間一般的に需要はものすごく少ないと思うのだけれども、HTMLに埋め込んであるSVG画像内で独自フォントを使ってにゃんにゃんしたい場面が出てきた。HTMLで独自フォント使うだけならハードルはまだ低いと思うのだが、SVGを一枚噛ませるというのが曲者だ。そもそも独自フォントってあれっしょ?作るの大変っしょ?と思ってたのだが、どーやらInkscapeでSVGフォント作ってから、そいつをクラウドの変換くんにぶちこめばTrueTypeFont(ttf)がサクッと作れるらしい。font」とかでググったらそこそこ情報出てくるので、ここでは割愛しとくわね。コメントを残すVSCode+CMakeでVS2019のビルド環境を構築するお仕事ではVisualStudio(*.sln)でMSVC(C/C++)の開発環境を構築しているのだけれども、他言語の開発環境はぜんぶVSCodeに統一してるからMSVCのビルド関係も揃えたいのよねー。VSCodeを使ってVisualStudio同等の事をやるのって、それはそれで大変そう。要は、いままでGUIで設定してた某を事細かにMakefile的な奴へゴリゴリ書かなきゃいけないんでしょ?おじさん、ゆとりすぎてMakeよく分からないんよね。そんなこんなでGoogle先生で色々調べてたら、CMakeとかいうツールが割とオススメらしい。「このコンパイラとかリンカ使いたいぜ」とか「ビルド対象はこのファイルだぜ」とか「実行ファイルとかライブラリとか作りたんだぜ」等のフワッとした願いを設定ファイルに書き込んでおけば、CMakeがそれを読み込んでステキなビルド環境を作ってくれるらしい。「よし、新しいコード組もう!」と思ったとき、前に作ったコードをエディタで開いてコピペしてくるって事がとにかく多い。俺の場合は特に、いろいろなプログラミング言語を横断的に使ってるせいで「あれどう書くんだったっけ?」ってなる事がガチで多い。そんな痴呆ボーイにとってマジで助かるのが、VSCodeにくっついてる「ユーザスニペット」機能だ。スニペットってのはなんかっつーと、少ない記述で短いプログラムを呼び出せる素敵なサムシング。こいつを使わない手はなかろうもん。特定のフォルダ以下の、特定の拡張子のファイルを拾い上げて、CSVでファイル名と更新時刻をリスト化したい。専用プログラム作らなくても、もっと楽な手段あるじゃろ・・・とか思いつつも、ちょうどいい機会なので、Goの勉強がてら作ってみることにした。buildして作ったexeを、こんな感じで使いたい。-walkdirで指定したフォルダ以下の、-extensionで指定した拡張子のファイルを検索して、そいつの更新日時を一覧でCSV出力する。かばん.doc,2018-04-13サーバル.pdf,2018-07-22ラッキービースト.xlsx,2019-04-11出力結果はこうなる。txtとか対象外のファイルは出力されない。2期?知らない子ですねぇ・・・イカソース。コメントを残す【Go】てきとーなコマンドラインツールを作ってみる今週からお仕事でGoを使い始めた。Go」を軽く流し読みした程度からのスタートだ。どんなプログラミング言語でも基本は一緒だから、なんとかなるっしょ。テキトーな課題が無いと勉強になんないので、2つのファイルをぶちこんで簡易的に比較する処理でも作ってみる事にした。コメントを残す【BAT】特定の文字列を含む(含まない)ファイル名を抽出して変数にぶちこむWindowsバッチ、苦手だから極力使いたくないンゴねぇ。それでも使わにゃいかん場面も稀によくある。泣き言いっても始まりゃしねえので、今の俺にできるのは、忘れないようにメモしておくだけじゃろう。ある条件下で、ビルドされた成果物を使いまわしていろいろなチェックにかける必要がでてきたのだが、厄介なことに、出力されるバイナリのファイル名は毎回ランダムなものになる。共通しているのは拡張子だけ。デバッグ用とリリース用のバイナリが同時出力されるので、そのうちリリース用のみを拾い出さなければならない。コメントを残すBOMつきUTF-8をJSON.parse()で読み込めなかったなんか最近いろんな言語でJSON扱う敷居が低くなってきたので、ファイルでデータを受け渡す時も割とJSONを使ったりする。こないだ他の人が作ったアプリが吐き出したJSON読む案件があって、こちとらElectron(Javascript)でデスクトップアプリ作ってるので、ファイル読み込んでからJSON.parse()すれば楽勝じゃね?てな感じでサクッとfs.readFile()やってみたわけですよ。0そしたら「ファイルの先頭に変なんあるよ!!」っぽい事を言われてパースしてくんない。JSONのデータフォーマット腐っとるんちゃうか?と思ってチェッカーに入れたけども、問題なし。コメントを残すElectron(+Vue.js)で外部アプリの進捗を表示する最近はElectronでデスクトップアプリ作ってるのだが、どうしても他の言語で作られたアプリを呼び出さにゃいかん感じになった。言語で外部プロセスを呼び出す仕組みはあるものだけれど、Node.jsの場合は「child_process」とかいうモジュールを読み込んでくればそれっぽい事が実現できるらしい。外部アプリを呼び出すだけなら良いのだけど、その外部アプリが結構重い処理をやってるので、バックグラウンドで動いてるかどうかをElectron側で表示したい。いうことは、外部アプリが標準出力に出している内容を何らかの手段でフックして、そいつをリアルタイム表示すればよさそう。いうわけで、絶賛お勉強中のVue.jsと組み合わせて試してみた。