Skip to content

Commit d906757

Browse files
committed
add clang support
1 parent 55f05f0 commit d906757

37 files changed

+143
-74
lines changed

README.md

+34
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,37 @@
11
# Professional C++ 5th edition answer
22

33
这是对于《Professional C++》第五版的一些自己做的答案(可能借鉴了一点点原书答案),采用MSVC最新支持的C++语法。
4+
5+
## MSVC
6+
7+
主要使用,均可运行。
8+
9+
## GCC
10+
11+
不支持
12+
13+
## Clang
14+
15+
简单测试,未完全覆盖,需要自行编译安装 libc++ module(libstdc++ 没有 module)。
16+
17+
过程为:
18+
19+
```shell
20+
git clone https://github.com/llvm/llvm-project.git
21+
cd llvm-project
22+
mkdir build
23+
cmake -G Ninja -S runtimes -B build -DLIBCXX_ENABLE_STD_MODULES=ON -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi;libunwind"
24+
ninja -C build
25+
```
26+
27+
`build` 文件夹为 `<build>`
28+
29+
30+
编译指令为在项目同级文件夹输入:
31+
32+
```shell
33+
mkdir build
34+
cmake -G Ninja -S . -B build -DCMAKE_CXX_COMPILER=<path-to-clang> -DLIBCXX_BUILD=<build>
35+
ninja -C build
36+
build/main
37+
```

chapter-1/1-1/CMakeLists.txt

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
CMAKE_MINIMUM_REQUIRED(VERSION 3.25)
22

3-
include("../../module.cmake")
4-
53
project(1-1)
64

5+
include("../../module.cmake")
6+
77
add_executable(${CMAKE_PROJECT_NAME})
88
target_sources(${CMAKE_PROJECT_NAME}
99
PUBLIC
10-
FILE_SET all_my_modules TYPE CXX_MODULES FILES
1110
main.cpp
11+
PRIVATE
12+
FILE_SET all_my_modules TYPE CXX_MODULES FILES
1213
employee.cppm
1314
)

chapter-1/1-2/CMakeLists.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
CMAKE_MINIMUM_REQUIRED(VERSION 3.25)
22

3-
include("../../module.cmake")
4-
53
project(1-2)
64

5+
include("../../module.cmake")
6+
77
add_executable(${CMAKE_PROJECT_NAME})
88
target_sources(${CMAKE_PROJECT_NAME}
99
PUBLIC

chapter-1/1-3/CMakeLists.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
CMAKE_MINIMUM_REQUIRED(VERSION 3.25)
22

3-
include("../../module.cmake")
4-
53
project(1-3)
64

5+
include("../../module.cmake")
6+
77
add_executable(${CMAKE_PROJECT_NAME})
88
target_sources(${CMAKE_PROJECT_NAME}
99
PUBLIC

chapter-1/1-4/CMakeLists.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
CMAKE_MINIMUM_REQUIRED(VERSION 3.25)
22

3-
include("../../module.cmake")
4-
53
project(1-4)
64

5+
include("../../module.cmake")
6+
77
add_executable(${CMAKE_PROJECT_NAME})
88
target_sources(${CMAKE_PROJECT_NAME}
99
PUBLIC

chapter-1/1-5/CMakeLists.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
CMAKE_MINIMUM_REQUIRED(VERSION 3.25)
22

3-
include("../../module.cmake")
4-
53
project(1-5)
64

5+
include("../../module.cmake")
6+
77
add_executable(${CMAKE_PROJECT_NAME})
88
target_sources(${CMAKE_PROJECT_NAME}
99
PUBLIC

chapter-1/1-6/CMakeLists.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
CMAKE_MINIMUM_REQUIRED(VERSION 3.25)
22

3-
include("../../module.cmake")
4-
53
project(1-6)
64

5+
include("../../module.cmake")
6+
77
add_executable(${CMAKE_PROJECT_NAME})
88
target_sources(${CMAKE_PROJECT_NAME}
99
PUBLIC

chapter-10/10-1/CMakeLists.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
CMAKE_MINIMUM_REQUIRED(VERSION 3.25)
22

3-
include("../../module.cmake")
4-
53
project(10-1)
64

5+
include("../../module.cmake")
6+
77
add_executable(${CMAKE_PROJECT_NAME})
88
target_sources(${CMAKE_PROJECT_NAME}
99
PUBLIC

chapter-10/10-2/CMakeLists.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
CMAKE_MINIMUM_REQUIRED(VERSION 3.25)
22

3-
include("../../module.cmake")
4-
53
project(10-2)
64

5+
include("../../module.cmake")
6+
77
add_executable(${CMAKE_PROJECT_NAME})
88
target_sources(${CMAKE_PROJECT_NAME}
99
PUBLIC

chapter-10/10-3/CMakeLists.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
CMAKE_MINIMUM_REQUIRED(VERSION 3.25)
22

3-
include("../../module.cmake")
4-
53
project(10-4)
64

5+
include("../../module.cmake")
6+
77
add_executable(${CMAKE_PROJECT_NAME})
88
target_sources(${CMAKE_PROJECT_NAME}
99
PUBLIC

chapter-10/10-4/CMakeLists.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
CMAKE_MINIMUM_REQUIRED(VERSION 3.25)
22

3-
include("../../module.cmake")
4-
53
project(10-3)
64

5+
include("../../module.cmake")
6+
77
add_executable(${CMAKE_PROJECT_NAME})
88
target_sources(${CMAKE_PROJECT_NAME}
99
PUBLIC

chapter-11/11-1/CMakeLists.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
CMAKE_MINIMUM_REQUIRED(VERSION 3.25)
22

3-
include("../../module.cmake")
4-
53
project(11-1)
64

5+
include("../../module.cmake")
6+
77
add_executable(${CMAKE_PROJECT_NAME})
88
target_sources(${CMAKE_PROJECT_NAME}
99
PUBLIC

chapter-11/11-2/CMakeLists.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
CMAKE_MINIMUM_REQUIRED(VERSION 3.25)
22

3-
include("../../module.cmake")
4-
53
project(11-2)
64

5+
include("../../module.cmake")
6+
77
add_executable(${CMAKE_PROJECT_NAME})
88
target_sources(${CMAKE_PROJECT_NAME}
99
PUBLIC

chapter-11/11-3/CMakeLists.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
CMAKE_MINIMUM_REQUIRED(VERSION 3.25)
22

3-
include("../../module.cmake")
4-
53
project(11-3)
64

5+
include("../../module.cmake")
6+
77
add_executable(${CMAKE_PROJECT_NAME})
88
target_sources(${CMAKE_PROJECT_NAME}
99
PUBLIC

chapter-11/11-4/CMakeLists.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
CMAKE_MINIMUM_REQUIRED(VERSION 3.25)
22

3-
include("../../module.cmake")
4-
53
project(11-4)
64

5+
include("../../module.cmake")
6+
77
add_executable(${CMAKE_PROJECT_NAME})
88
target_sources(${CMAKE_PROJECT_NAME}
99
PUBLIC

chapter-12/12-1/CMakeLists.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
CMAKE_MINIMUM_REQUIRED(VERSION 3.25)
22

3-
include("../../module.cmake")
4-
53
project(12-1)
64

5+
include("../../module.cmake")
6+
77
add_executable(${CMAKE_PROJECT_NAME})
88
target_sources(${CMAKE_PROJECT_NAME}
99
PUBLIC

chapter-12/12-2/CMakeLists.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
CMAKE_MINIMUM_REQUIRED(VERSION 3.25)
22

3-
include("../../module.cmake")
4-
53
project(12-2)
64

5+
include("../../module.cmake")
6+
77
add_executable(${CMAKE_PROJECT_NAME})
88
target_sources(${CMAKE_PROJECT_NAME}
99
PUBLIC

chapter-12/12-3/CMakeLists.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
CMAKE_MINIMUM_REQUIRED(VERSION 3.25)
22

3-
include("../../module.cmake")
4-
53
project(12-3)
64

5+
include("../../module.cmake")
6+
77
add_executable(${CMAKE_PROJECT_NAME})
88
target_sources(${CMAKE_PROJECT_NAME}
99
PUBLIC

chapter-12/12-4/CMakeLists.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
CMAKE_MINIMUM_REQUIRED(VERSION 3.25)
22

3-
include("../../module.cmake")
4-
53
project(12-4)
64

5+
include("../../module.cmake")
6+
77
add_executable(${CMAKE_PROJECT_NAME})
88
target_sources(${CMAKE_PROJECT_NAME}
99
PUBLIC

chapter-12/12-5/CMakeLists.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
CMAKE_MINIMUM_REQUIRED(VERSION 3.25)
22

3-
include("../../module.cmake")
4-
53
project(12-5)
64

5+
include("../../module.cmake")
6+
77
add_executable(${CMAKE_PROJECT_NAME})
88
target_sources(${CMAKE_PROJECT_NAME}
99
PUBLIC

chapter-12/12-6/CMakeLists.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
CMAKE_MINIMUM_REQUIRED(VERSION 3.25)
22

3-
include("../../module.cmake")
4-
53
project(12-6)
64

5+
include("../../module.cmake")
6+
77
add_executable(${CMAKE_PROJECT_NAME})
88
target_sources(${CMAKE_PROJECT_NAME}
99
PUBLIC

chapter-13/13-1/CMakeLists.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
CMAKE_MINIMUM_REQUIRED(VERSION 3.25)
22

3-
include("../../module.cmake")
4-
53
project(13-1)
64

5+
include("../../module.cmake")
6+
77
add_executable(${CMAKE_PROJECT_NAME})
88
target_sources(${CMAKE_PROJECT_NAME}
99
PUBLIC

chapter-13/13-2/CMakeLists.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
CMAKE_MINIMUM_REQUIRED(VERSION 3.25)
22

3-
include("../../module.cmake")
4-
53
project(13-2)
64

5+
include("../../module.cmake")
6+
77
add_executable(${CMAKE_PROJECT_NAME})
88
target_sources(${CMAKE_PROJECT_NAME}
99
PUBLIC

chapter-2/2-1/CMakeLists.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
CMAKE_MINIMUM_REQUIRED(VERSION 3.25)
22

3-
include("../../module.cmake")
4-
53
project(2-1)
64

5+
include("../../module.cmake")
6+
77
add_executable(${CMAKE_PROJECT_NAME})
88
target_sources(${CMAKE_PROJECT_NAME}
99
PUBLIC

chapter-2/2-2/CMakeLists.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
CMAKE_MINIMUM_REQUIRED(VERSION 3.25)
22

3-
include("../../module.cmake")
4-
53
project(2-2)
64

5+
include("../../module.cmake")
6+
77
add_executable(${CMAKE_PROJECT_NAME})
88
target_sources(${CMAKE_PROJECT_NAME}
99
PUBLIC

chapter-2/2-3/CMakeLists.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
CMAKE_MINIMUM_REQUIRED(VERSION 3.25)
22

3-
include("../../module.cmake")
4-
53
project(2-3)
64

5+
include("../../module.cmake")
6+
77
add_executable(${CMAKE_PROJECT_NAME})
88
target_sources(${CMAKE_PROJECT_NAME}
99
PUBLIC

chapter-2/2-4/CMakeLists.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
CMAKE_MINIMUM_REQUIRED(VERSION 3.25)
22

3-
include("../../module.cmake")
4-
53
project(2-4)
64

5+
include("../../module.cmake")
6+
77
add_executable(${CMAKE_PROJECT_NAME})
88
target_sources(${CMAKE_PROJECT_NAME}
99
PUBLIC

chapter-7/7-3/CMakeLists.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
CMAKE_MINIMUM_REQUIRED(VERSION 3.25)
22

3-
include("../../module.cmake")
4-
53
project(7-3)
64

5+
include("../../module.cmake")
6+
77
add_executable(${CMAKE_PROJECT_NAME})
88
target_sources(${CMAKE_PROJECT_NAME}
99
PUBLIC

chapter-8/8-1/CMakeLists.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
CMAKE_MINIMUM_REQUIRED(VERSION 3.25)
22

3-
include("../../module.cmake")
4-
53
project(8-1)
64

5+
include("../../module.cmake")
6+
77
add_executable(${CMAKE_PROJECT_NAME})
88
target_sources(${CMAKE_PROJECT_NAME}
99
PUBLIC

chapter-8/8-2/CMakeLists.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
CMAKE_MINIMUM_REQUIRED(VERSION 3.25)
22

3-
include("../../module.cmake")
4-
53
project(8-2)
64

5+
include("../../module.cmake")
6+
77
add_executable(${CMAKE_PROJECT_NAME})
88
target_sources(${CMAKE_PROJECT_NAME}
99
PUBLIC

0 commit comments

Comments
 (0)