私はcmake
自分のプロジェクトを構築するために使用しています。UNIX の場合make
、プロジェクトのルート ディレクトリから入力し、 cmake
(まだ存在しない場合は) 適切な Makefile を作成するために呼び出してから、プロジェクトをビルドしたいと考えています。cmake
「内部」ファイル (オブジェクト ファイル、cmake
内部 Makefile など) を非表示 (たとえば、.build
ディレクトリに配置) にして、プロジェクト ディレクトリが乱雑にならないようにしたいと考えています。
私のプロジェクトにはいくつかのサブプロジェクトがあります (特に、ライブラリ、ユーザー実行可能ファイル、単体テスト実行可能ファイル)。make
サブプロジェクトごとに Makefileを実行しcmake
て (上記のように)、そのサブプロジェクトのみをビルドします (依存関係があるため、必要に応じて実行可能ファイルの Makefile からライブラリがビルドされます)。結果のバイナリ (.so ライブラリまたは実行可能ファイル) は、サブプロジェクトのディレクトリにある必要があります。
ちょっとハックな感じはしますが、メインプロジェクトを少しうまくやるMakefileを作りました。私の Makefile は単にのビルド ディレクトリをmake
呼び出すだけなので、それを使用して特定のターゲットをビルドすることはできません。cmake
ライブラリは唯一の依存関係であるため (おそらく手動でビルドする必要はなく、私は怠け者なので)、Makefile では省略しました。
BUILD_DIR := .build
.PHONY: all clean project-gui ${BUILD_DIR}/Makefile
all: project-gui project-test
clean:
@([ -d ${BUILD_DIR} ] && make -C ${BUILD_DIR} clean && rm -r ${BUILD_DIR}) || echo Nothing to clean
project-gui: ${BUILD_DIR}/Makefile
@make -C ${BUILD_DIR} project-gui
@cp ${BUILD_DIR}/project-gui/project-gui $@
project-test: ${BUILD_DIR}/Makefile
@make -C ${BUILD_DIR} project-test
@cp ${BUILD_DIR}/project-test/project-test $@
${BUILD_DIR}/Makefile:
@[ -d ${BUILD_DIR} ] || mkdir -p ${BUILD_DIR}
@[ -f ${BUILD_DIR}/Makefile ] || (cd ${BUILD_DIR} && cmake ${CMAKE_OPTS} ..)
それが役立つ場合、これが私のプロジェクト構造です(これが「間違っている」場合は教えてください-私はまだ学んでいますcmake
):
project/
project/CMakeLists.txt
project/common.cmake
project/Makefile -- see Makefile above for this; should be replaced with something better, building libproject, project-gui, and project-test
project/libproject/
project/libproject/CMakeLists.txt
project/libproject/libproject.so -- after build
project/libproject/Makefile -- doesn't exist yet; should build libproject only
project/libproject/source/
project/libproject/include/
project/project-gui/
project/project-gui/CMakeLists.txt
project/project-gui/Makefile -- doesn't exist yet; should build libproject then project-gui
project/project-gui/source/
project/project-gui/include/
project/project-test/
project/project-test/CMakeLists.txt
project/project-test/Makefile -- doesn't exist yet; should build libproject then project-test
project/project-test/source/
project/project-test/include/
cmake
まだ理解していない場合は、基本的に、あたかもプロジェクトが Makefile だけで構成されているかのように、プロジェクトとサブプロジェクトをそこにないかのように構築する方法を探しています。これはできますか?ソリューションは洗練されていますか、それとも面倒ですか? 代わりに何か他のことをしようとする必要がありますか?
ありがとう!