以下のような階層のプロジェクトがあった時,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)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/07 00:44
2019/12/07 05:43
2019/12/08 17:49
2019/12/08 17:50