@kazbo_ @tomoya 大抵のデスクトッププラットフォーム (Win/Mac/Linuxほか) では開発ツールチェインの類って複数バージョンを並列インストール可能じゃないですか? (MacはXcode事情しかわかりませんが)
Notices by Atsushi Eno (atsushieno@fedibird.com)
-
Atsushi Eno (atsushieno@fedibird.com)'s status on Monday, 07-Oct-2024 01:06:00 JST Atsushi Eno -
Atsushi Eno (atsushieno@fedibird.com)'s status on Monday, 07-Oct-2024 01:05:59 JST Atsushi Eno @kazbo_ @tomoya パッケージから展開して実行するコンパイラツールチェインであってもクロスコンパイルできないことにはならないと思いますが、特定のグローバルなコンパイラを使えるのであれば、シンプルにCMakeのプラットフォーム別ツールチェイン構成ファイルのアプローチでできそうに思えます(その中でgccやclangが--sysroot等を指定するイメージ)。
複数のABI向けのビルドに1つのCMakeLists.txtで対応するAndroid NDKなんかはこれでしょうか。(ただNDKではABI別にGradleから毎回cmakeを呼び出しています) -
Atsushi Eno (atsushieno@fedibird.com)'s status on Monday, 07-Oct-2024 01:05:59 JST Atsushi Eno @kazbo_ @tomoya そういう話であれば、やはり松浦さんが書かれていたvcpkgとかconanでパッケージとしてツールチェインが提供されているものを使うアプローチが適切そうに思います(Gradleとかでもできるやつ)。
conanだとこんな感じ https://docs.conan.io/2/tutorial/consuming_packages/use_tools_as_conan_packages.html
vcpkg + CMakeのソリューションだとこんな感じでしょうか https://stackoverflow.com/questions/74422058/how-to-use-vcpkg-with-clang-on-linux
ただ仕組みがあるかどうかとツールチェインパッケージが充実しているかは別問題ですね。conancenterだとgcc12くらいしか見当たりません。自分ならPATH. LD_LIBRARY_PATH, PKG_CONFIG_PATHを調整してやっつけたことにしちゃいますね…
-
Atsushi Eno (atsushieno@fedibird.com)'s status on Monday, 07-Oct-2024 01:05:57 JST Atsushi Eno @kazbo_ @tomoya npmやpythonには一般的にはクロスコンパイルとかABIの概念が無いので(ネイティブライブラリが必要な場合は別のビルドツールに丸投げしてしまう)、いまC++でやりたいことをpythonやnodeでやろうとしたら、やっぱりお手軽にはできないと思います。
たぶん想定ターゲットプラットフォームが不明であることが話をややこしくしているのだと思いますが、独自の組み込みOSや特定のコンパイラツールチェインが必要なターゲットである場合には、カスタムCMakeツールチェインを自分で整備する必要がいずれにせよあると思います。
そうでない、Win/Mac/Linuxのような(ツールチェインファイルが整備された)ターゲット向けにクロスコンパイルできれば十分、という話であれば、conanみたいにパッケージでツールチェインを指定できるやつが、pyenv等と同程度にシンプルかと思います。
https://stackoverflow.com/questions/14685798/is-there-an-equivalent-of-pythons-virtualenv-for-c-c-programsIn conversation from social.076.moe permalink Attachments
-
Atsushi Eno (atsushieno@fedibird.com)'s status on Wednesday, 31-Jul-2024 21:05:29 JST Atsushi Eno @ikeji 使える場面が限られそうだけど -V では
In conversation from fedibird.com permalink Attachments