编译:
1、环境A编译生成的库,拷贝到环境B,可能会由于不同环境中相关编译文件版本不同而导致无法使用。
2、linux环境下.so是动态库,运行时链接,多可执行文件共享,.a是静态库,每个可执行文件都调用。windows环境下.dll是动态库,.lib是静态库。
3、将一个工程代码拷贝到另一个环境时,最好删除工程代码中的build目录,避免引起CMakeCache.txt的制定目录和当前CMakeLists.txt所在目录不一致的问题。
4、make -j8同时运行8个任务来进行编译,用于提高大型工程编译速度。
5、编译时会对C++代码进行严格的审查,包括词法分析、语法分析、语义分析、中间代码生成、优化、目标代码生成和链接。linux中最常见的编译器是g++,是GNU C++编译器。构建不仅限于编译:它还包括其他操作,如预处理、链接、优化、打包、测试等。这些操作可以在编译之前或之后进行。构建过程通常由构建工具(如Make、CMake、Gradle等)来管理和执行。预编译会在编译前进行文本替换。cmake命令加载CMakelists文件,生成makefile文件,执行make命令,根据makefile中的编译和链接规则进行编译和链接,生成可执行文件。
CMakelists文件:
1、file生成目录列表并赋值给变量,file(GLOB a ./b/c)将./b/c目录和子目录的列表赋值给变量a。GLOB表示目录下所有的子目录列表。
2、${x}表示x的实际value。
3、add_executable("target_name", "test_list", "src_list", "lib_list"...)生成名称为target_name的可执行文件,test_list表示测试用例目录列表,src_list是cpp文件目录列表,lib_list是lib库.c文件目录列表。
4、find_package(gtest REQUIRE)查找是否有gtest代码库,REQUIRE表示如果没有就报异常信息。
5、target_link_libraries({name}, PRIVATE,gtest)中的PRIVATE表示gtest只给当前的目标文件使用。