え、Githubのコードってgit cloneするだけじゃダメなことあるんだ!
おはようございます。フォートナイト、今シーズンはどんどん子供達とレベルが離されてる@kjunichiです。
背景
先日の記事
にてC++のウェブサーバclaskを試した際、git cloneするだけじゃpicotestフォルダのコードが取得できず、cmakeでエラー になっていた。記事を早く仕上げたいから、手動で、ファイルをコピペ?して用意してやり過ごしていた。
CMake Error at CMakeLists.txt:50 (add_executable): Cannot find source file: picotest/picotest.c Tried extensions .c .C .c++ .cc .cpp .cxx .cu .m .M .mm .h .hh .h++ .hm .hpp .hxx .in .txx CMake Error at CMakeLists.txt:50 (add_executable): No SOURCES given to target: clask_test CMake Generate step failed. Build files cannot be regenerated correctly.
git cloneだけだとダメなケースの詳細
どうやらsub moduleを使っている発生する模様。
git cloneだけだとダメな場合の対応方法
あらかじめ、サブモジュールを使っていることが分かっている場合、cloneする際に以下のオプション--recursiveをつければ解決!
git clone --recursive https://github.com/mattn/clask.git
git clone してこれに気づいたら、rm -rf して上記オプション付きのgitコマンドを実行するか、
git submodule update --init --recursive
とすれば解決!
おわりに
はじめはhttps方式がダメなのかとSSH方式に切り替えて試したりしたが、--recursiveを指定すれば良いことに なかなかたどり着けなかった。