编译与链接
makefile
vi main.c
vi math.c
gcc -c main.c
gcc -c math.c
编译之后出现两个扩展名为.o的文件,目标文件
ls *.o
main.o math.o
readelf -h main.o 在文件头部找到可执行文件的基本信息和支持的操作系统,机器类型等信息
readelf -S main.o 显示区块
objdump -s -d main.o 查看机器代码和反汇编
objdump -r main.o 显示重定位表
编译后不能直接执行,需要连接
连接:将编译的静态文件和静态库,运行时库组合拼装成一个可执行文件
gcc main.o math.o -o main
./main
定义依赖树
all:main
main: main.o math.o
gcc main.o math.o main
main.o:main.c
gcc -c main.c
main.o:math.c
gcc -c math.c
clean:
rm main main.o math.o
make main
//则自动执行以下
gcc -c main.c
gcc -c math.c
gcc main.o math.o main
tree 显示已经生成依赖结构
修改main.c
make main
//不需要执行gcc -c math.c
gcc -c main.c
gcc main.o math.o main
CMake
windows下载cmake
choco install cmake
winget install cmake
配置安装目录到环境变量
创建CMakeLists.txt
单文件基础代码
cmake_minimum_required(VERSION 3.10)
project(Example)
add_executable(Example main.cpp)
命令行:
cmake -S . -B build 配置项目(配置版本)(vscode中菜单>cmake configure)
cmake --build build 构建项目(vscode中菜单>cmake build)
多文件
cmake_minimum_required(VERSION 3.10)
project(Example)
find_package(库 REQUIRED)
find_package(库 REQUIRED)
find_package(库 REQUIRED)
file(GLOB SRC_FILES
"${PROJECT_SOURCE_DIR}/src/*.h"
"${PROJECT_SOURCE_DIR}/src/*.cpp"
"${PROJECT_SOURCE_DIR}/src/*.c"
"${PROJECT_SOURCE_DIR}/src/*.cc")
add_executable(${CMAKE_PROJECT_NAME} ${SRC_FILES})构建可执行文件 工程名字 匹配的所有源文件
target_compile_features(${CMAKE_PROJECT_NAME} PRIVATE cxx_std_17)开启C++17支持(如果需要)
add_custom_command(
TARGET ${CMAKE_PROJECT_NAME}
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
"${PROJECT_SOURCE_DIR}/assets"
"$<TARGET_FILE_DIR:${CMAKE_PROJECT_NAME}>/assets>")
将根目录下的assets文件夹拷贝到输出路径下
C++第三方库可以使用vcpkg安装
Q.E.D.