# learn_make **Repository Path**: pangzidemeng/learn_make ## Basic Information - **Project Name**: learn_make - **Description**: cmake 的使用 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-09-09 - **Last Updated**: 2024-09-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 基础的编译命令 源码通过编译的到目标文件 目标文件可以链接成可执行文件 目标文件可以打包成静态库 目标文件可以打包成动态库 编译可以执行文件可以直接使用目标文件,也可以使用静态库 还可以使用动态库 ## 编译目标文件 g++ -c -o <目标文件的名字> 源码路径 例如: 编译a的目标文件 g++ -c liba/a.cpp -o build/liba/a.o 编译c的目标文件 g++ -c libd/d.cpp -o build/libd/d.o 编译b的目标文件 这时候由于b.cpp 依赖了a.h和c.h 所以在编译目标文件的时候要添加 a.h和c.h 的文件路径 g++ libb/b.cpp -Iliba -Ilibd -c -o build/libb/b.o 编译main的目标文件 因为main.cpp只依赖了b.h所以在编译目标文件的时候只需要依赖b.h所在的位置 g++ main.cpp -Ilibb -c -o build/main.o ## 直接使用目标文件 编译可执行文件 编译可执行文件 main需要依赖 main.o b.o, b.o 依赖 a.o, d.o g++ build/main.o build/libb/b.o build/liba/a.o build/libd/d.o -o build/main ## 根据目标文件生成静态库 ar rcs liba/liba.a liba/a.o ar rcs libd/libd.a libd/d.o ar rcs libb/libb.a libb/b.o ## 根据静态库编译main方法 g++ build/main.o build/main -L./build/libb -L./build/liba -L./build/libd -lb -la -ld ## 根据目标文件生成动态库 生成动态库在编译目标文件需要添加 -fPIC 参数 它会将依赖的函数进行符号转化不进行真是的链接,等到运行的时候再将符号根据运行的实际地址进行赋值,如果不添加 -fPIC 不算真正的动态库特性 编译a的动态库 g++ -fPIC -c liba/a.cpp -o build/liba/a.o g++ -shared build/liba/a.o -o build/liba/liba.so 编译d的动态库 g++ -fPIC -c libd/d.cpp -o build/libd/d.o g++ -shared build/libd/d.o -o build/libd/libd.so 编译b的动态库 g++ -fPIC -c libb/b.cpp -o build/libb/b.o -Iliba -Ilibd g++ -shared build/libb/b.o -o build/libb/libb.so 编译main后函数 g++ -fPIC -c main.cpp -o build/main.o -Ilibb g++ main.o -o ./build/main -L./build/libb -L./build/liba -L./build/libd -la -lb -ld '-Wl,-R./build/liba' '-Wl,-R./build/libb' '-Wl,-R./build/libd'