File tree 4 files changed +33
-42
lines changed
4 files changed +33
-42
lines changed Original file line number Diff line number Diff line change 1
- cmake_minimum_required (VERSION 3.14) # 提高了 CMake 版本要求
1
+ cmake_minimum_required (VERSION 3.14)
2
2
project (answer)
3
3
4
- #[[
5
- 判断当前目录是否是 CMake 调用的 top-level,如果是,
6
- 引入 CTest 支持。
7
-
8
- 这会引入一个 BUILD_TESTING 选项(类似之前的 CACHE
9
- STRING,这是一个 CACHE BOOL),默认值为 ON,可以在
10
- 之后的 CMake 脚本中通过该选项判断是否需要 include
11
- 测试用例子目录。
12
- #]]
13
4
if (CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME )
14
5
include (CTest)
15
6
endif ()
Original file line number Diff line number Diff line change
1
+ WOLFRAM_APPID :=
2
+
3
+ .PHONY : build
4
+ build : configure
5
+ cmake --build build
6
+
7
+ .PHONY : configure
8
+ configure :
9
+ cmake -B build -DWOLFRAM_APPID=${WOLFRAM_APPID}
10
+
11
+ .PHONY : run
12
+ run :
13
+ ./build/answer_app
14
+
15
+ .PHONY : test
16
+ test :
17
+ ctest --test-dir build -R " ^answer."
18
+
19
+ .PHONY : clean
20
+ clean :
21
+ rm -rf build
22
+
23
+ #
24
+ # 可以使用 Make 来更方便地调用 CMake 命令:
25
+ #
26
+ # make build WOLFRAM_APPID=xxx
27
+ # make test
28
+ # make run
29
+ # make clean
30
+ #
Original file line number Diff line number Diff line change @@ -13,7 +13,6 @@ target_compile_definitions(libanswer INTERFACE WOLFRAM_APPID="${WOLFRAM_APPID}")
13
13
target_compile_features (libanswer INTERFACE cxx_std_20)
14
14
target_link_libraries (libanswer INTERFACE wolfram)
15
15
16
- # 只在启用了 BUILD_TESTING 的情况下构建测试程序
17
16
if (BUILD_TESTING)
18
17
add_subdirectory (tests)
19
18
endif ()
Original file line number Diff line number Diff line change 1
- # 导入 FetchContent 相关命令
2
1
include (FetchContent)
3
2
4
- # 描述如何获取 Catch2
5
3
FetchContent_Declare(
6
- catch2 # 建议使用全小写
4
+ catch2
7
5
GIT_REPOSITORY https://github.com/catchorg/Catch2.git
8
6
GIT_TAG v3.0.0-preview3)
9
7
10
- # 一条龙地下载、构建 Catch2
11
8
FetchContent_MakeAvailable(catch2)
12
9
13
- #[[
14
- FetchContent 要求 CMake 3.11 或更高版本,在此之间
15
- 可以使用 Git submodule + add_subdirectory 的方式
16
- 使用没有安装在系统中的第三方库。即使支持 FetchContent
17
- 也可以选择使用 Git submodule,各有优劣。
18
-
19
- FetchContent_MakeAvailable 要求 CMake 3.14,如果
20
- 要支持更旧版本,或者需要更细粒度的控制,可以使用如下替代:
21
-
22
- FetchContent_GetProperties(catch2)
23
- if(NOT catch2_POPULATED)
24
- FetchContent_Populate(catch2)
25
- add_subdirectory(${catch2_SOURCE_DIR} ${catch2_BINARY_DIR})
26
- endif()
27
- #]]
28
-
29
- # macro(宏)类似于 C/C++ 中的宏
30
10
macro (answer_add_test TEST_NAME)
31
- add_executable (${TEST_NAME} ${ARGN} ) # ${ARGN} 类似于 C/C++ 中的 __VA_ARGS__
32
- #[[
33
- add_test 添加 CTest 可以识别到的测试程序,建议使用项目名前缀,
34
- 方便在运行测试时和别的第三方库的测试区分。
35
- #]]
11
+ add_executable (${TEST_NAME} ${ARGN} )
36
12
add_test (NAME answer.${TEST_NAME} COMMAND ${TEST_NAME} )
37
13
target_link_libraries (${TEST_NAME} PRIVATE libanswer)
38
- #[[
39
- 链接 Catch2::Catch2WithMain 以使用 Catch2 提供的宏,链接
40
- Catch2WithMain 时,测试程序中不需要手动编写 main 函数。
41
- #]]
42
14
target_link_libraries (${TEST_NAME} PRIVATE Catch2::Catch2WithMain)
43
15
endmacro ()
44
16
45
- # 调用上面的 macro 添加测试程序
46
17
answer_add_test(test_check_the_answer test_check_the_answer.cpp)
You can’t perform that action at this time.
0 commit comments