C++高性能并行编程与优化 - 课件 - 01 学 C++ 从 CMake 学起https://github.com/zenustech/zeno ) 什么是编译器 • 编译器,是一个根据源代码生成机器码的程序。 • > g++ main.cpp -o a.out • 该命令会调用编译器程序 g++ ,让他读取 main.cpp 中的字符串(称为源码),并根据 C+ + 标准生成相应的机器指令码,输出到 a.out 这个文件中,(称为可执行文件)。 • > ./a.out 工程变大时,编译时间变得很长,改动一个地方就得全部重新编译。 • 因此,我们提出多文件编译的概念,文件之间通过符号声明相互引用。 • > g++ -c hello.cpp -o hello.o • > g++ -c main.cpp -o main.o • 其中使用 -c 选项指定生成临时的对象文件 main.o ,之后再根据一系列对象文件进行链接 ,得到最终的 a.out : • > g++ hello.o main 指明依赖关系的好处: 1. 当更新了 hello.cpp 时只会重新编译 hello.o ,而不需要把 main.o 也重新编译一遍。 2. 能够自动并行地发起对 hello.cpp 和 main.cpp 的编译,加快编译速度( make -j )。 3. 用通配符批量生成构建规则,避免针对每个 .cpp 和 .o 重复写 g++ 命令( %.o: %.cpp )。 • 但坏处也很明显:0 码力 | 32 页 | 11.40 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 11 现代 CMake 进阶指南,那样会让你的项目无法被人作为子模块使用。 其他相关变量 • PROJECT_SOURCE_DIR :当前项目源码路径(存放 main.cpp 的地方) • PROJECT_BINARY_DIR :当前项目输出路径(存放 main.exe 的地方) • CMAKE_SOURCE_DIR :根项目源码路径(存放 main.cpp 的地方) • CMAKE_BINARY_DIR :根项目输出路径(存放 main.exe 的地方) 构建工程的产生器。它将产生构建文件 (e.g. "Unix Makefiles", "Visual Studio 2019", etc.) 一个标准的 CMakeLists.txt 模板 第 3 章:链接库文件 main.cpp 调用 mylib.cpp 里的 say_hello 函数 改进: mylib 作为一个静态库 改进: mylib 作为一个动态库 改进: mylib 作为一个对象库 https://www “hello;world”) 如果 message 没加引号会怎样?会把列表里的字符串当成他的关键字 结论:除非确实需要列表,建议始终在你不确定的地方加上引号,例如: set(sources “main.cpp” “mylib.cpp” “C:/Program Files/a.cpp”) message(“${sources}”) 第 7 章:变量与缓存 重复执行 cmake -B build 会有什么区别?0 码力 | 166 页 | 6.54 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 16 现代 CMake 模块化项目管理指南src/*.cpp) • 疑问 1 :都是按照通配符批量匹配文件,有什么区别? • GLOB : src/main.cpp (√) src/test/main.cpp ( × ) • GLOB_RECURSE : src/main.cpp (√) src/test/main.cpp (√) • 区别在于 GLOB_RECURSE 允许 * 匹配嵌套的目录。 • 疑问 2 :加了 CONFIGURE_DEPENDS0 码力 | 56 页 | 6.87 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 03 现代 C++ 进阶:模板元编程这是因为编译器对模板的编译是惰性的,即只有当前 .cpp 文件用到了这个模板,该模板 里的函数才会被定义。而我们的 sumto.cpp 中没有用到 sumto<> 函数的任何一份定义, 所以 main.cpp 里只看到 sumto<> 函数的两份声明,从而出错。 • 解决:在看得见 sumto<> 定义的 sumto.cpp 里,增加两个显式编译模板的声明: 一般来说,我会建议模板不要 分离声明和定义,直接写在头0 码力 | 82 页 | 12.15 MB | 1 年前3
Cmake 实践nc.c”) 此外,你可以可以忽略掉 source 列表中的源文件后缀,比如可以写成 ADD_EXECUTABLE(t1 main),cmake 会自动的在本目录查找 main.c 或者 main.cpp 等,当然,最好不要偷这个懒,以免这个目录确实存在一个 main.c 一个 main. 同时参数也可以使用分号来进行分割。 下面的例子也是合法的: ADD_EXECUTABLE(t1 main0 码力 | 47 页 | 264.27 KB | 1 年前3
Linux命令大全搜索工具 v1.8用于显示elf格式文件的信息 - 926 - 本文档使用 书栈网 · BookStack.CN 构建 1)查看可执行程序的源代码如下: 1. root@localhost [test]$ cat main.cpp 2. #include3. using std::cout; 4. using std::endl; 5. void my_print(); 6. cout<<"print!"< main.cpp -o main 2. [root@localhost test]$ g++ -g main.cpp -o main.debug 3)编译之后,查看生成的文件: 1. [root@localhost test]$ ls -l 2. 总计 quietheart quietheart 6700 07-07 18:04 main 4. -rw-r--r-- 1 quietheart quietheart 201 07-07 18:02 main.cpp 5. -rwxr-xr-x 1 quietheart quietheart 38932 07-07 18:04 main.debug 这里,main.debug是带有调试信息的可执行文件,main是一般的可执行文件。 0 码力 | 1347 页 | 8.79 MB | 1 年前3
FISCO BCOS 1.3 中文文档Directories Illustration abi Implementation of CNS(Contract Name Service) eth Main entry of FISCO BCOS, main.cpp is included in this directory libchannelserver AMOP(Advanced Messages Onchain Protocol) implementation0 码力 | 491 页 | 5.72 MB | 1 年前3
共 7 条
- 1













