質問編集履歴

1

CMakeLists.txtの追記.およびフォルダ構成,ファイル名の変更

2019/12/08 17:49

投稿

nishiys
nishiys

スコア33

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,6 @@
1
- 以下のような階層のプロジェクトがあった時,test_fact.cppのみを書き換えながらUnit Testを実行したいのですが,今の状態では本体のソースファイル側(fact.hpp, fact.cpp)に変更がないにも関わらず全体をコンパイルしなおさなければならず,非効率に感じています.
1
+ 以下のような階層のプロジェクトがあった時,test_libfunction.cppのみを書き換えながらUnit Testを実行したいのですが,今の状態では本体のソースファイル側(main.cpp, vectorfunctions.hpp, vectorfunctions.cpp)に変更がないにも関わらず全体をコンパイルしなおさなければならず,非効率に感じています.
2
2
 
3
- fact.cppとtest_fact.cppはmylib.cppに依存しており,mylib.cppを動的ライブラリにしてリンクする設計になっているのですが,今の状態だとmylib.cppから動的ライブラリを作成するところも毎回コンパイルしなおしていることになっています.
3
+ main.cppとtest_libfunction.cppはvectorfunctions.cppに依存しており,vectorfunctions.cppを動的ライブラリにしてリンクする設計になっているのですが,今の状態だとvectorfunctions.cppから動的ライブラリを作成するところも毎回コンパイルしなおしていることになっています.
4
4
 
5
5
  どのようにすれば解決できるでしょうか.
6
6
 
@@ -10,38 +10,108 @@
10
10
 
11
11
 
12
12
 
13
+ フォルダ構成
14
+
13
15
  ```
14
16
 
15
- /factorial
17
+ /vector_calculation
16
18
 
17
19
  +-- CMakeLists.txt
18
20
 
19
- +-- /bin
21
+ +-- /build
20
22
 
21
- +-- /include
23
+ +-- /drivers
22
24
 
23
- | +-- catch.hpp
25
+ | +-- main.cpp
24
26
 
25
- | +-- fact.hpp
27
+ +-- /external
26
28
 
27
- | +-- mylib.hpp
29
+ | +-- /catch
28
30
 
29
- +-- /src
30
-
31
- | +-- CMakeLists.txt
32
-
33
- | +-- fact.cpp
31
+ | +-- catch.hpp
34
32
 
35
33
  +-- /library
36
34
 
37
- | +-- CMakeLists.txt
35
+ +-- /inc
38
36
 
39
- | +-- mylib.cpp
37
+ | +-- vectorfunctions.hpp
40
38
 
41
- +-- /test
39
+ +-- /src
42
40
 
43
- +-- CMakeLists.txt
41
+ | +-- vectorfunctions.cpp
44
42
 
43
+ +-- /test
44
+
45
+ +-- CMakeLists.txt
46
+
45
- +-- test_fact.cpp
47
+ +-- test_libfunction.cpp
46
48
 
47
49
  ```
50
+
51
+
52
+
53
+ CMakeLists.txt
54
+
55
+ ```
56
+
57
+ cmake_minimum_required(VERSION 3.10)
58
+
59
+ project(VectorCalculation CXX)
60
+
61
+
62
+
63
+
64
+
65
+ file(GLOB LIB_SOURCE_FILES library/src/*.cpp)
66
+
67
+ file(GLOB HEADER_FILES library/inc/*.h*)
68
+
69
+ file(GLOB TEST_SOURCE_FILES library/test/*.cpp)
70
+
71
+
72
+
73
+ # corresponding to -I option in make
74
+
75
+ include_directories(external/catch)
76
+
77
+ include_directories(library/inc)
78
+
79
+
80
+
81
+ # other options and get additional options from command line
82
+
83
+ if( CMAKE_COMPILER_IS_GNUCXX )
84
+
85
+ set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -std=c++11 -Wall -Wextra" )
86
+
87
+ endif( CMAKE_COMPILER_IS_GNUCXX )
88
+
89
+
90
+
91
+ # g++ -shared -o vectorkernel ${LIB_SOURCE_FILES}
92
+
93
+ add_library(vectorkernel SHARED ${LIB_SOURCE_FILES} ${HEADER_FILES})
94
+
95
+
96
+
97
+ add_executable(main drivers/main.cpp ${HEADER_FILES})
98
+
99
+
100
+
101
+ target_link_libraries(main vectorkernel)
102
+
103
+
104
+
105
+ add_subdirectory(library/test)
106
+
107
+ ```
108
+
109
+ test/CMakeLists.txt
110
+
111
+ ```
112
+
113
+ add_executable(vectorkernel_testrunner ${TEST_SOURCE_FILES} ${HEADER_FILES})
114
+
115
+ target_link_libraries(vectorkernel_testrunner vectorkernel)
116
+
117
+ ```