├── CMakeLists-5-Test ├── inc │ ├── add.h │ └── mul.h ├── libsrc │ ├── add.cpp │ ├── mul.cpp │ └── CMakeLists.txt ├── run.sh ├── src │ ├── main.cpp │ └── CMakeLists.txt ├── readme.md └── CMakeLists.txt ├── CMakeLists-7-Test ├── source │ ├── add │ │ ├── add.h │ │ ├── add3.h │ │ ├── add.cpp │ │ ├── add3.cpp │ │ └── CMakeLists.txt │ ├── mul │ │ ├── mul.h │ │ ├── CMakeLists.txt │ │ └── mul.cpp │ ├── sub │ │ ├── sub.h │ │ ├── CMakeLists.txt │ │ └── sub.cpp │ └── main │ │ ├── CMakeLists.txt │ │ └── main.cpp ├── run.sh ├── readme.md └── CMakeLists.txt ├── CMakeLists-8-Test ├── source │ ├── add │ │ ├── add.h │ │ ├── add3.h │ │ ├── add.cpp │ │ └── add3.cpp │ ├── mul │ │ ├── mul.h │ │ └── mul.cpp │ ├── sub │ │ ├── sub.h │ │ └── sub.cpp │ └── main │ │ └── main.cpp ├── run.sh ├── readme.md └── CMakeLists.txt ├── CMakeLists-6-Test ├── sub │ ├── add.h │ ├── CMakeLists.txt │ └── add.cpp ├── run.sh ├── readme.md ├── main.cpp └── CMakeLists.txt ├── CMakeLists-3-Test ├── src │ ├── count.cpp │ └── test03.cpp ├── include │ └── count.h └── CMakeLists.txt ├── CMakeLists-1-Test ├── test01.h ├── test01.cpp └── CMakeLists.txt ├── CMakeLists-4-Test ├── include │ └── test04.h ├── src │ └── test04.cpp └── CMakeLists.txt ├── CMakeLists-2-Test ├── CMakeLists.txt └── test02.cpp └── readme.md /CMakeLists-5-Test/inc/add.h: -------------------------------------------------------------------------------- 1 | int add(int a, int b); 2 | -------------------------------------------------------------------------------- /CMakeLists-5-Test/inc/mul.h: -------------------------------------------------------------------------------- 1 | int mul(int a, int b); 2 | -------------------------------------------------------------------------------- /CMakeLists-7-Test/source/add/add.h: -------------------------------------------------------------------------------- 1 | int add(int x, int y); -------------------------------------------------------------------------------- /CMakeLists-7-Test/source/mul/mul.h: -------------------------------------------------------------------------------- 1 | int mul(int x, int y); -------------------------------------------------------------------------------- /CMakeLists-7-Test/source/sub/sub.h: -------------------------------------------------------------------------------- 1 | int sub(int x, int y); -------------------------------------------------------------------------------- /CMakeLists-8-Test/source/add/add.h: -------------------------------------------------------------------------------- 1 | int add(int x, int y); -------------------------------------------------------------------------------- /CMakeLists-8-Test/source/mul/mul.h: -------------------------------------------------------------------------------- 1 | int mul(int x, int y); -------------------------------------------------------------------------------- /CMakeLists-8-Test/source/sub/sub.h: -------------------------------------------------------------------------------- 1 | int sub(int x, int y); -------------------------------------------------------------------------------- /CMakeLists-7-Test/source/add/add3.h: -------------------------------------------------------------------------------- 1 | int add(int x, int y, int z); -------------------------------------------------------------------------------- /CMakeLists-8-Test/source/add/add3.h: -------------------------------------------------------------------------------- 1 | int add(int x, int y, int z); -------------------------------------------------------------------------------- /CMakeLists-6-Test/sub/add.h: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | void add(int a, int b); -------------------------------------------------------------------------------- /CMakeLists-6-Test/sub/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_library(subadd add.cpp) # 生成动态库libsubadd.a,subadd这个名字可以自定义 2 | -------------------------------------------------------------------------------- /CMakeLists-3-Test/src/count.cpp: -------------------------------------------------------------------------------- 1 | # include "count.h" 2 | 3 | int count(int x, int y){ 4 | return x+y; 5 | } 6 | -------------------------------------------------------------------------------- /CMakeLists-5-Test/libsrc/add.cpp: -------------------------------------------------------------------------------- 1 | #include "add.h" 2 | 3 | int add(int a, int b) 4 | { 5 | return a + b; 6 | } 7 | -------------------------------------------------------------------------------- /CMakeLists-5-Test/libsrc/mul.cpp: -------------------------------------------------------------------------------- 1 | #include "mul.h" 2 | 3 | int mul(int a, int b) 4 | { 5 | return a * b; 6 | } 7 | -------------------------------------------------------------------------------- /CMakeLists-7-Test/source/sub/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # 编译成静态库, libsub.a 2 | add_library(sub ${CMAKE_CURRENT_SOURCE_DIR}/sub.cpp) -------------------------------------------------------------------------------- /CMakeLists-6-Test/run.sh: -------------------------------------------------------------------------------- 1 | # 自动化编译和运行的脚本 2 | rm -rf build 3 | mkdir build 4 | cd build/ 5 | cmake .. 6 | make -j4 7 | ./main -------------------------------------------------------------------------------- /CMakeLists-1-Test/test01.h: -------------------------------------------------------------------------------- 1 | #ifndef TEST01_H 2 | #define TEST01_H 3 | 4 | void print_hello(); 5 | 6 | #endif // TEST01_H 7 | -------------------------------------------------------------------------------- /CMakeLists-7-Test/source/mul/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # 编译成动态库libmul.so 2 | add_library(mul SHARED ${CMAKE_CURRENT_SOURCE_DIR}/mul.cpp) -------------------------------------------------------------------------------- /CMakeLists-3-Test/include/count.h: -------------------------------------------------------------------------------- 1 | # ifndef COUNT_H 2 | # define COUNT_H 3 | 4 | int count(int x, int y); 5 | 6 | # endif // COUNT_H 7 | -------------------------------------------------------------------------------- /CMakeLists-4-Test/include/test04.h: -------------------------------------------------------------------------------- 1 | #ifndef TEST04_H 2 | #define TEST04_H 3 | 4 | int count(int, int); 5 | 6 | #endif // TEST04_H 7 | -------------------------------------------------------------------------------- /CMakeLists-7-Test/source/add/add.cpp: -------------------------------------------------------------------------------- 1 | #include "add.h" 2 | #include "iostream" 3 | 4 | int add(int x, int y){ 5 | return x+y; 6 | } -------------------------------------------------------------------------------- /CMakeLists-7-Test/source/mul/mul.cpp: -------------------------------------------------------------------------------- 1 | #include "mul.h" 2 | #include "iostream" 3 | 4 | int mul(int x, int y){ 5 | return x*y; 6 | } -------------------------------------------------------------------------------- /CMakeLists-7-Test/source/sub/sub.cpp: -------------------------------------------------------------------------------- 1 | #include "sub.h" 2 | #include "iostream" 3 | 4 | int sub(int x, int y){ 5 | return x-y; 6 | } -------------------------------------------------------------------------------- /CMakeLists-8-Test/source/add/add.cpp: -------------------------------------------------------------------------------- 1 | #include "add.h" 2 | #include "iostream" 3 | 4 | int add(int x, int y){ 5 | return x+y; 6 | } -------------------------------------------------------------------------------- /CMakeLists-8-Test/source/mul/mul.cpp: -------------------------------------------------------------------------------- 1 | #include "mul.h" 2 | #include "iostream" 3 | 4 | int mul(int x, int y){ 5 | return x*y; 6 | } -------------------------------------------------------------------------------- /CMakeLists-8-Test/source/sub/sub.cpp: -------------------------------------------------------------------------------- 1 | #include "sub.h" 2 | #include "iostream" 3 | 4 | int sub(int x, int y){ 5 | return x-y; 6 | } -------------------------------------------------------------------------------- /CMakeLists-6-Test/sub/add.cpp: -------------------------------------------------------------------------------- 1 | #include "add.h" 2 | 3 | void add(int a, int b) 4 | { 5 | std::cout << "add = " << a+b << std::endl; 6 | } -------------------------------------------------------------------------------- /CMakeLists-7-Test/source/add/add3.cpp: -------------------------------------------------------------------------------- 1 | #include "add3.h" 2 | #include "iostream" 3 | 4 | int add(int x, int y, int z){ 5 | return x+y+z; 6 | } -------------------------------------------------------------------------------- /CMakeLists-8-Test/source/add/add3.cpp: -------------------------------------------------------------------------------- 1 | #include "add3.h" 2 | #include "iostream" 3 | 4 | int add(int x, int y, int z){ 5 | return x+y+z; 6 | } -------------------------------------------------------------------------------- /CMakeLists-5-Test/run.sh: -------------------------------------------------------------------------------- 1 | # 自动化编译和运行的脚本 2 | rm -rf build 3 | mkdir build 4 | cd build/ 5 | cmake .. 6 | make # 使用并行编译会失败,https://blog.csdn.net/clarkness/article/details/86633681 7 | cd ../bin 8 | ./test5 -------------------------------------------------------------------------------- /CMakeLists-6-Test/readme.md: -------------------------------------------------------------------------------- 1 | [Cmake命令之add_subdirectory介绍](https://www.jianshu.com/p/07acea4e86a3) 2 | 3 | 只有一个动态库subadd,另外生成一个引用该库的可执行文件main。 4 | 5 | 涉及到使用ADD_SUBDIRECTORY实现多个cmakelists的调用。 6 | 7 | -------------------------------------------------------------------------------- /CMakeLists-7-Test/run.sh: -------------------------------------------------------------------------------- 1 | # 自动化编译和运行的脚本 2 | rm -rf build 3 | mkdir build 4 | cd build/ 5 | cmake .. 6 | make # 使用并行编译会失败,https://blog.csdn.net/clarkness/article/details/86633681 7 | cd ../bin 8 | ./main -------------------------------------------------------------------------------- /CMakeLists-8-Test/run.sh: -------------------------------------------------------------------------------- 1 | # 自动化编译和运行的脚本 2 | rm -rf build 3 | mkdir build 4 | cd build/ 5 | cmake .. 6 | make # 使用并行编译会失败,https://blog.csdn.net/clarkness/article/details/86633681 7 | cd ../bin 8 | ./main -------------------------------------------------------------------------------- /CMakeLists-6-Test/main.cpp: -------------------------------------------------------------------------------- 1 | #include "add.h" 2 | #include 3 | 4 | int main() 5 | { 6 | int x = 3; 7 | int y = 5; 8 | add(x, y); 9 | std::cout << "end." << std::endl; 10 | } -------------------------------------------------------------------------------- /CMakeLists-5-Test/src/main.cpp: -------------------------------------------------------------------------------- 1 | #include "add.h" 2 | #include "mul.h" 3 | #include 4 | 5 | int main() 6 | { 7 | printf("3 + 5 = %d\n", add(3, 5)); 8 | printf("3 * 5 = %d\n", mul(3, 5)); 9 | return 0; 10 | } 11 | -------------------------------------------------------------------------------- /CMakeLists-5-Test/libsrc/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # refer:cmake : add_library详解:https://blog.csdn.net/LaineGates/article/details/108242803 2 | # 生成静态库,name属性必须全局唯一 3 | add_library(add STATIC ${PROJECT_SOURCE_DIR}/libsrc/add.cpp) 4 | add_library(mul STATIC ${PROJECT_SOURCE_DIR}/libsrc/mul.cpp) 5 | -------------------------------------------------------------------------------- /CMakeLists-3-Test/src/test03.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include "count.h" 3 | 4 | using namespace std; 5 | 6 | int main(){ 7 | int m, n; 8 | m = 5; n = 8; 9 | int p = count(m, n); 10 | cout << "p = " << p << endl; 11 | cout << "===== end =====" < 2 | #include "test01.h" 3 | 4 | using namespace std; 5 | 6 | 7 | void print_hello(){ 8 | cout << "hello, world." << endl; 9 | } 10 | 11 | 12 | int main(){ 13 | print_hello(); 14 | cout << "===== end =====" << endl; 15 | return 0; 16 | } 17 | -------------------------------------------------------------------------------- /CMakeLists-5-Test/src/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # 发现一个目录下所有的源代码文件并将列表存储在一个变量中 2 | aux_source_directory(${PROJECT_SOURCE_DIR}/src SRC_LIST) # 设置./src为源文件路径 3 | 4 | add_executable (test5 ${SRC_LIST}) # 寻找源文件来编译可执行文件 5 | target_link_libraries(test5 6 | ${PROJECT_SOURCE_DIR}/lib/libadd.a 7 | ${PROJECT_SOURCE_DIR}/lib/libmul.a) # 编译时需要链接的静态库 8 | -------------------------------------------------------------------------------- /CMakeLists-7-Test/readme.md: -------------------------------------------------------------------------------- 1 | refer: 2 | - [CMakeList模板(二):编译多个工程](https://blog.csdn.net/lianshaohua/article/details/107783811) 3 | - [CMake——CMakeLists.txt 的详解](https://blog.csdn.net/zhangzhikang_zzk/article/details/125681694#t5) 4 | 5 | 使用cmake构建一个工程,每个子模块都有自己的cmakelists,该工程创建了两个静态库和一个动态库,另外生成一个调用这些库的可执行文件。 6 | 7 | 涉及到使用ADD_SUBDIRECTORY实现多个cmakelists的调用。 8 | 9 | -------------------------------------------------------------------------------- /CMakeLists-8-Test/readme.md: -------------------------------------------------------------------------------- 1 | refer: 2 | - [CMakeList模板(二):编译多个工程](https://blog.csdn.net/lianshaohua/article/details/107783811) 3 | - [CMake——CMakeLists.txt 的详解](https://blog.csdn.net/zhangzhikang_zzk/article/details/125681694#t5) 4 | 5 | 只使用cmake构建一个工程,包含多个子模块,但没有自己的cmakelists,该工程创建了两个静态库和一个动态库,另外生成一个调用这些库的可执行文件。 6 | 7 | 涉及到使用ADD_SUBDIRECTORY实现多个cmakelists的调用。 8 | 9 | -------------------------------------------------------------------------------- /CMakeLists-6-Test/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # 父目录下的CMakeLists.txt 2 | cmake_minimum_required(VERSION 3.5) # cmake版本最低要求 3 | project(main) # 设置工程名称 4 | 5 | # sub子模块 6 | include_directories(sub) # 添加头文件查找路径 7 | add_subdirectory(sub) # 会编译子模块生成静态库,默认保存位置:build/sub/libsubadd.a 8 | 9 | add_executable(main main.cpp) 10 | target_link_libraries(main subadd) # 会链接静态库subadd 11 | -------------------------------------------------------------------------------- /CMakeLists-5-Test/readme.md: -------------------------------------------------------------------------------- 1 | refer: 2 | - [cmake创建库和使用库工程示例(多个cmakelists)](https://blog.csdn.net/hhl_work/article/details/120670486) 3 | - [cmake : add_library详解:](https://blog.csdn.net/LaineGates/article/details/108242803) 4 | - [linux编译命令——make -j8](https://blog.csdn.net/clarkness/article/details/86633681) 5 | 6 | 使用cmake构建一个工程,该工程创建了两个静态库,另外生成一个引用这两个静态库的可执行文件。 7 | 8 | 涉及到使用ADD_SUBDIRECTORY实现多个cmakelists的调用。 -------------------------------------------------------------------------------- /CMakeLists-2-Test/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # 1,设置工程名称,叫“Demo2”,在Linux下可以随便设置 2 | project( Demo2 ) 3 | 4 | # 2,设置 CMake 最低版本号,我电脑装的是3.5 5 | cmake_minimum_required( VERSION 3.5 ) 6 | 7 | # 3,设定编译参数 8 | set(CMAKE_CXX_STANDARD 11) # 指定 C++ 版本 9 | set(CMAKE_BUILD_TYPE "Release") # 调试使用Debug,可以查看中间变量;发布使用Release,运行速度快 10 | 11 | # 4,把源码编译成一个可执行文件,文件名为test02(可以随便取名),会保存在当前目录下 12 | add_executable( test02 test02.cpp ) 13 | -------------------------------------------------------------------------------- /CMakeLists-7-Test/source/main/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # 添加头文件路径,会检索目录中的所有头文件 2 | include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../add 3 | ${CMAKE_CURRENT_SOURCE_DIR}/../sub 4 | ${CMAKE_CURRENT_SOURCE_DIR}/../mul 5 | ${CMAKE_CURRENT_SOURCE_DIR}/../main) 6 | 7 | # 把源码编译成一个可执行文件 8 | add_executable(main ./main.cpp) 9 | # 添加链接库,动态和静态都行 10 | target_link_libraries(main add sub mul) -------------------------------------------------------------------------------- /CMakeLists-2-Test/test02.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | using namespace std; 5 | 6 | 7 | void print_hello(){ 8 | cout << "hello, world." << endl; 9 | } 10 | 11 | int main(){ 12 | print_hello(); 13 | float arr[3][3] = {1,23,4,5,6,7,8}; 14 | cout << arr[0][0] << endl; 15 | 16 | vector vec = {1,23,4,5,6,7,8}; 17 | cout << vec[1] << endl << vec[2] << endl; 18 | 19 | cout << "===== end =====" << endl; 20 | return 0; 21 | } 22 | -------------------------------------------------------------------------------- /CMakeLists-7-Test/source/add/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # 编译成静态库, libadd.a 2 | # 方法一:逐个添加cpp源文件,适用于文件数量少的情况 3 | # add_library(add ${CMAKE_CURRENT_SOURCE_DIR}/add.cpp ${CMAKE_CURRENT_SOURCE_DIR}/add3.cpp) 4 | 5 | # 方法二:搜索有的cpp源文件,并将列表存储在一个变量中,适用于文件多的情况 6 | aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} SRC_LIST) 7 | add_library(add ${SRC_LIST}) 8 | 9 | # 方法三:递归遍历目录,获取所有的CPP文件,适用于多级目录的情况 10 | # file(GLOB_RECURSE cpp_files ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp) # GLOB是不递归 11 | # add_library(add ${cpp_files}) -------------------------------------------------------------------------------- /CMakeLists-1-Test/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # 1,设置工程名称,叫“Demo1”(在Linux下可以随便设置) 2 | project( Demo1 ) 3 | 4 | # 2,设置 CMake 最低版本号,我电脑装的是3.5 5 | cmake_minimum_required( VERSION 3.5 ) 6 | 7 | # 3,设定编译参数 8 | set(CMAKE_CXX_STANDARD 11) # 指定 C++ 版本 9 | set(CMAKE_BUILD_TYPE "Release") # 调试使用Debug,可以查看中间变量;发布使用Release,运行速度快 10 | 11 | # 4,把当前文件夹下的源码列表(文件后缀匹配的那些文件)存到变量 SRCS 中 12 | file( GLOB SRCS *.c *.cpp *.cc *.h *.hpp ) 13 | 14 | # 5,把源码编译成一个可执行文件,文件名为test01(可以随便取名),会保存在当前目录下 15 | add_executable( test01 ${SRCS} ) 16 | -------------------------------------------------------------------------------- /CMakeLists-5-Test/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required (VERSION 3.5) # cmake版本最低要求 2 | project (test5) # 设置工程名称 3 | 4 | SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) # 设置可执行文件的输出目录 5 | SET(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib) # 设置库文件的输出目录 6 | 7 | include_directories (${PROJECT_SOURCE_DIR}/inc) # 添加头文件目录,可以添加多个,或多次添加 8 | 9 | # refer:https://www.jianshu.com/p/07acea4e86a3 10 | ADD_SUBDIRECTORY(${PROJECT_SOURCE_DIR}/libsrc) # 先执行这个目录下的cmake生成静态库 11 | ADD_SUBDIRECTORY(${PROJECT_SOURCE_DIR}/src) # 在生成库后,此时再链接库生成可执行文件 12 | 13 | -------------------------------------------------------------------------------- /CMakeLists-3-Test/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # 1,设置工程名称,叫“Demo3”,在Linux下可以随便设置 2 | project( Demo3 ) 3 | 4 | # 2,设置 CMake 最低版本号,我电脑装的是3.5 5 | cmake_minimum_required( VERSION 3.5 ) 6 | 7 | # 3,设定编译参数 8 | set(CMAKE_CXX_STANDARD 11) # 指定 C++ 版本 9 | set(CMAKE_BUILD_TYPE "Release") # 调试使用Debug,可以查看中间变量;发布使用Release,运行速度快 10 | 11 | # 4,设定源码列表,查找指定目录下的所有源文件,并将名称保存到 DIR_SRCS 变量中 12 | aux_source_directory(./src/ DIR_SRC) 13 | 14 | # 5,设定头文件路径 15 | include_directories(./include/) 16 | 17 | # 6,把源码编译成一个可执行文件,文件名为test03(可以随便取名),会保存在当前目录下 18 | add_executable( test03 ${DIR_SRC} ) 19 | -------------------------------------------------------------------------------- /CMakeLists-7-Test/source/main/main.cpp: -------------------------------------------------------------------------------- 1 | #include "add.h" 2 | #include "add3.h" 3 | #include "sub.h" 4 | #include "mul.h" 5 | #include 6 | 7 | int main(){ 8 | int x = 8; 9 | int y = 5; 10 | int z = 7; 11 | std::cout << "x=" << x << ", y=" << y << ", z=" << z << std::endl; 12 | std::cout << "add(x, y)=" << add(x, y) << std::endl; 13 | std::cout << "add(x, y, z)=" << add(x, y, z) << std::endl; 14 | std::cout << "sub(x, y)=" << sub(x, y) << std::endl; 15 | std::cout << "mul(x, y)=" << mul(x, y) << std::endl; 16 | return 0; 17 | } -------------------------------------------------------------------------------- /CMakeLists-8-Test/source/main/main.cpp: -------------------------------------------------------------------------------- 1 | #include "add.h" 2 | #include "add3.h" 3 | #include "sub.h" 4 | #include "mul.h" 5 | #include 6 | 7 | int main(){ 8 | int x = 8; 9 | int y = 5; 10 | int z = 7; 11 | std::cout << "x=" << x << ", y=" << y << ", z=" << z << std::endl; 12 | std::cout << "add(x, y)=" << add(x, y) << std::endl; 13 | std::cout << "add(x, y, z)=" << add(x, y, z) << std::endl; 14 | std::cout << "sub(x, y)=" << sub(x, y) << std::endl; 15 | std::cout << "mul(x, y)=" << mul(x, y) << std::endl; 16 | return 0; 17 | } -------------------------------------------------------------------------------- /CMakeLists-4-Test/src/test04.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include "test04.h" 3 | #include 4 | 5 | using namespace std; 6 | using namespace cv; 7 | 8 | int count(int x, int y){ 9 | return x+y; 10 | } 11 | 12 | int main(){ 13 | int m, n; 14 | m = 5; n = 8; 15 | cout << "m + n = " << count(m, n) << endl; 16 | 17 | cv::Mat M(2, 2, CV_8UC3, Scalar(0,0,255)); 18 | cout << "M = " << endl << " " << M << endl << endl; 19 | 20 | cv::Mat M2 = (cv::Mat_(2,3)<<1,3,5,7,9,11); 21 | cout << "M2 = " << endl << " " << M2 << endl << endl; 22 | 23 | Mat Z = Mat::zeros(2,2, CV_8UC1); 24 | cout << "Z = " << endl << " " << Z << endl << endl; 25 | 26 | cout << "===== end =====" <