autoconfの場合、基礎的な仕組みとad hoc なルールが明確に切り分けられてて、 後者はすべてマクロで構築されてるので、足りない部分は既存のマクロを参考に自分で用意するとか容易だけど、 CMakeの場合、VisualStudio の各バージョン対応みたいなのが C++ のソースコードとして記述されてて、 CMakeであらかじめ対応しているプラットフォーム向けは簡単な記述で済むし実行速度も速いけど、 ちょっと想定から外れた使い方しようとすると途端に面倒くさくなって落差が激しい感じ。
よく知らない頃は ad hoc なルールの類は全部組み込みスクリプティング言語で書いてあるかと思ってたら 全然そうじゃないので、なんかコレジャナイ感が。
CMake (スコア:1)
CMakeホントにいいかなあ。
autoconfの場合、基礎的な仕組みとad hoc なルールが明確に切り分けられてて、
後者はすべてマクロで構築されてるので、足りない部分は既存のマクロを参考に自分で用意するとか容易だけど、
CMakeの場合、VisualStudio の各バージョン対応みたいなのが C++ のソースコードとして記述されてて、
CMakeであらかじめ対応しているプラットフォーム向けは簡単な記述で済むし実行速度も速いけど、
ちょっと想定から外れた使い方しようとすると途端に面倒くさくなって落差が激しい感じ。
よく知らない頃は ad hoc なルールの類は全部組み込みスクリプティング言語で書いてあるかと思ってたら
全然そうじゃないので、なんかコレジャナイ感が。
Re: (スコア:0)
>CMakeの場合、VisualStudio の各バージョン対応みたいなのが C++ のソースコードとして記述されてて、
それはCMakeは関係ない。クロスプラットフォームなコードを書くときに、ビルドするのに特定のツールに依存してヘッダーなりソースコードを生成してそれを参照してビルドというのが嫌われているだけ。
それにVisualStudio の各バージョン対応のようなものをスクリプトで前処理する方が数倍めんどくさいと思うが、そういう事やったことあって言ってる?
Re: (スコア:0)
>>CMakeの場合、VisualStudio の各バージョン対応みたいなのが C++ のソースコードとして記述されてて、
>
> それはCMakeは関係ない。クロスプラットフォームなコードを書くときに、ビルドするのに特定のツールに依存してヘッダーなりソースコードを生成してそれを参照してビルドというのが嫌われているだけ。
「ビルドするのに特定のツールに依存してヘッダーなりソースコードを生成してそれを参照してビルド」の
「特定のツール」って何のこと?
autoconf の場合、配布されたソースをビルドするのに autoconf を含め特定のツールは必要ないと思うんだけど。
まあ UNIX互
Re: (スコア:0)
え?config.h的なものを生成してビルドすることを言っててるんだと思ったんだが違うのか?
>VisualStudio の各バージョン対応みたいなのが C++ のソースコードとして記述されてて
というのが何を指してるのかわからん。Generatorの話ならVisual Studioは大抵古いバージョンのを指定してソリューション生成しても新しいバージョンで開いてビルド出来るし、IDE必要ないならMakefile生成して好きなコンパイラ使えばいいし。
Makefileしか生成出来ないautoconfと何を比べてるのか解らん
Re: (スコア:0)
> え?config.h的なものを生成してビルドすることを言っててるんだと思ったんだが違うのか?
違いますね。
config.h は、-DHAVE_機能 というコマンドラインオプションを生成しているようなものなので
全然問題ないでしょう。
>> VisualStudio の各バージョン対応みたいなのが C++ のソースコードとして記述されてて
>
> というのが何を指してるのかわからん。Generatorの話なら...
Generator の話です。
こういう特定のツールに依存した機能を、プラグインとして分離せず CMake 本体に組み込んじゃうセンスがついていけないって話。
Re: (スコア:0)
CMakeがVisualStudioに対応してるんだから
それを本体に組み込もうがプラグインにしようが
それはCMakeの勝手じゃないの?
Re: (スコア:0)
> それを本体に組み込もうがプラグインにしようが
> それはCMakeの勝手じゃないの?
もちろん CMake の勝手なんだけど、そこは最初からプラグインとして外に出しておいた方が設計として筋がいいと思うって話。
VisualStudio じゃなくて別の開発ツールに対して同じような機能つけたくなることもあるのに、
同じようなことするのに CMake 本体側をいじる方が簡単になるような設計方針はちょっと微妙なセンスなんじゃないかってこと。
Re: (スコア:0)
>VisualStudio じゃなくて別の開発ツールに対して同じような機能つけたくなることもあるのに
autoconfに対してmakeじゃなくてじゃなくて「別の開発ツールに対して同じような機能つけたくなること」はないの?なんでCMakeにだけそれを求めるの?
Re: (スコア:0)
> autoconfに対してmakeじゃなくてじゃなくて「別の開発ツールに対して同じような機能つけたくなること」はないの?なんでCMakeにだけそれを求めるの?
autoconf は make 以外のツールに使うこともできます。
autotools は、autoconf と automake と libtool が主な構成要素で、
このうち make を前提しているのは automake だけです。
autoconf を Makefile ではない他のビルドツール生成に使うってのは普通にできます。
こういう機能分割とカスタマイズ・ポイントの提供という意味で、
autotools は良くできてますよ。
CMake の方は VisualStudio だけのためのツ
Re: (スコア:0)
>autoconf を Makefile ではない他のビルドツール生成に使うってのは普通にできます。
そうなんですね。ググってもすぐ見つかりませんでしたが、例えばどのようなものがあるのでしょうか?
Re:CMake (スコア:0)
> そうなんですね。ググってもすぐ見つかりませんでしたが、例えばどのようなものがあるのでしょうか?
make は普遍的に存在していて、ニーズが少ないから見つからないでしょうね。
autoconf っていうのは、本質的には m4 マクロを使ってシェルスクリプトを生成するツールに過ぎず、
その m4 マクロとして、システム付属のヘッダファイルやライブラリを参照した結果に応じて
テンプレートをベースにファイルを生成する仕組みが完備しているというものです。
このコアの仕組みには make への依存はまったくありません。
生成するファイルも Makefile とは限らず、configure.ac で逐一指定するようになってます。
デフォルトで用意されているマクロに automake 用のものが沢山用意されていて、
普通は automake と組み合わせて使うってだけです。
autoconf と make は使いたいが automake は使いたくないというニーズはちょっとあって、
やり方を質問している人とか見かけますね。
https://stackoverflow.com/questions/23572271/build-a-project-without-m... [stackoverflow.com]
Re: (スコア:0)
普遍的に存在しているmakeへの出力をcmakeも対応してるんですが、Ninjaなどのビルドツールへの対応もされてますよね。そこには需要があるからです。
なぜautoconfでNinja対応が見つからないのでしょうか?貴方が言うように普通にできてカスタマイズポイントの提供が出来ているというのであれば、そのカスタマイズポイントを使って提供されていると思うんですが。
まさかautotoolsのようなメジャーなツールをNinjaチームが対応可能なのにあえて無視するとは思えません。
https://github.com/ninja-build/ninja/wiki/List-of-generators-producing... [github.com]
Re: (スコア:0)
> なぜautoconfでNinja対応が見つからないのでしょうか?
目的が違うからでしょうね。
autoconf の目的は、より多くの UNIX系 OS で容易にソフトウェアをビルドすることです。
だから autoconf を利用したソースコードをビルドする際に必要なのは、
UNIX系OSで標準的に付属しているツール類とツールチェインだけです。
ビルドする側では、autoconf のような余分なソフトウェアをあらかじめ入れておく必要はありません。
このように、CMake や ninja のようなツールを用意しなくてもビルドが行えるという利点の裏返しとし
Re:CMake (スコア:2)
本当、Autotools を使って make 以外でビルドしてる例って凄いレアケースだと思う。
上で挙げられてる cccl も CL.EXE を cc 互換にする wrapper (つまり make を利用してる)だし、少なくとも自分は make 以外の事例を例を見たことがない。
たいへん興味があるので、もしも知っているプロジェクトがあるなら、後学のために例示して頂けると嬉しい。
uxi