🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
CMake

CMakeはクロスプラットフォームで作動するオープンソースのビルドシステムです。コマンドライン又は組み込まれた開発環境で使うことができる元のmakefileとプロジェクトファイルを生成します。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

1回答

2485閲覧

CMake+Catch2でテストを行う際に一部のみを再コンパイルする方法

nishiys

総合スコア33

CMake

CMakeはクロスプラットフォームで作動するオープンソースのビルドシステムです。コマンドライン又は組み込まれた開発環境で使うことができる元のmakefileとプロジェクトファイルを生成します。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2019/12/06 18:21

編集2019/12/08 17:49

以下のような階層のプロジェクトがあった時,test_libfunction.cppのみを書き換えながらUnit Testを実行したいのですが,今の状態では本体のソースファイル側(main.cpp, vectorfunctions.hpp, vectorfunctions.cpp)に変更がないにも関わらず全体をコンパイルしなおさなければならず,非効率に感じています.
main.cppとtest_libfunction.cppはvectorfunctions.cppに依存しており,vectorfunctions.cppを動的ライブラリにしてリンクする設計になっているのですが,今の状態だとvectorfunctions.cppから動的ライブラリを作成するところも毎回コンパイルしなおしていることになっています.
どのようにすれば解決できるでしょうか.

ご回答お待ちしております.

フォルダ構成

/vector_calculation +-- CMakeLists.txt +-- /build +-- /drivers | +-- main.cpp +-- /external | +-- /catch | +-- catch.hpp +-- /library +-- /inc | +-- vectorfunctions.hpp +-- /src | +-- vectorfunctions.cpp +-- /test +-- CMakeLists.txt +-- test_libfunction.cpp

CMakeLists.txt

cmake_minimum_required(VERSION 3.10) project(VectorCalculation CXX) file(GLOB LIB_SOURCE_FILES library/src/*.cpp) file(GLOB HEADER_FILES library/inc/*.h*) file(GLOB TEST_SOURCE_FILES library/test/*.cpp) # corresponding to -I option in make include_directories(external/catch) include_directories(library/inc) # other options and get additional options from command line if( CMAKE_COMPILER_IS_GNUCXX ) set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -std=c++11 -Wall -Wextra" ) endif( CMAKE_COMPILER_IS_GNUCXX ) # g++ -shared -o vectorkernel ${LIB_SOURCE_FILES} add_library(vectorkernel SHARED ${LIB_SOURCE_FILES} ${HEADER_FILES}) add_executable(main drivers/main.cpp ${HEADER_FILES}) target_link_libraries(main vectorkernel) add_subdirectory(library/test)

test/CMakeLists.txt

add_executable(vectorkernel_testrunner ${TEST_SOURCE_FILES} ${HEADER_FILES}) target_link_libraries(vectorkernel_testrunner vectorkernel)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

そもそもmakeとかCmakeとかは、変更されてないモジュールのビルド操作を実行しない、ことを目的として開発されたプロダクツです

常に全体のビルドしか出来ない、というのであれば使い方が間違ってます

投稿2019/12/06 23:53

y_waiwai

総合スコア88040

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nishiys

2019/12/07 00:44

その通りですね、ありがとうございます。CMake初心者のため、その実現方法がわかっていませんでした。 このディレクトリ構成の場合はtest/直下で $ cmake . をするとtest_fact.cppの変更箇所のみが再コンパイルされるというようにCMakeLists.txtを作る必要があるのでしょうか。それともbin/直下で $ cmake .. は変わらないが、変更箇所のみがコンパイルされるように作らなければならないという事でしょうか。
yumetodo

2019/12/07 05:43

というよりCMakeLists.txtを追記してもらえますか?多分そこがおかしいような
nishiys

2019/12/08 17:49

追記いたしました.ご確認いただけると幸いです.
nishiys

2019/12/08 17:50

(名前とフォルダ構成を今の実際の状態に変更しています.)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問