Linux下cmake构建方法

  1. 工程目录结构如下:
  1. 根目录下build.sh文件内容如下:
bash 复制代码
#!/bin/bash

# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'


ROOT_DIR=$(pwd)

OUT_DIR=${ROOT_DIR}/out/

BUILD_DIR=${ROOT_DIR}/build


if [ "$1" == "clean" ]; then
	echo -e "${BLUE}clean all, rm -rf build; rm -rf out${NC}"
	rm -rf ${BUILD_DIR}
	rm -rf ${OUT_DIR}
fi


if [ ! -d "${BUILD_DIR}" ]; then
	echo "build dir ${BUILD_DIR} not exist, need create !"
	mkdir -p ${BUILD_DIR}
fi

if [ ! -d "${OUT_DIR}" ]; then
	echo "out dir ${OUT_DIR} not exist, need create !"
	mkdir -p ${OUT_DIR}
fi

cd ${BUILD_DIR}

cmake ..
make
make install

echo $(date) > ${OUT_DIR}/.build_time

echo -e "${GREEN}build success!${NC}"
  1. 根目录下的CMakeLists.txt文件内容如下:
bash 复制代码
cmake_minimum_required(VERSION 3.10)
project(MyProject VERSION 1.0.0)

# 设置C标准
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)

# 设置安装前缀(out目录)
set(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/out)
message(STATUS "Install prefix: ${CMAKE_INSTALL_PREFIX}")  # 调试信息

# 添加子目录
add_subdirectory(app)
add_subdirectory(tools)
  1. app目录下的CMakeLists.txt文件内容如下:
bash 复制代码
set(APP_TARGET "app")

set(APP_SRC main.c)

add_executable(${APP_TARGET} ${APP_SRC})

install(TARGETS ${APP_TARGET}
        RUNTIME DESTINATION bin)
  1. tools目录下的CMakeLists.txt文件内容如下:
bash 复制代码
add_subdirectory(test)
  1. tools/test目录下的CMakeLists.txt文件内容如下:
bash 复制代码
set(TEST_TARGET "test")
set(TEST_SRC main.c)

add_executable(${TEST_TARGET} ${TEST_SRC})

# 关键:必须添加 install 命令
install(TARGETS ${TEST_TARGET}
        RUNTIME DESTINATION bin
)
相关推荐
qq_163135752 小时前
Linux 【07-rm命令超详细教程】
linux
zh路西法2 小时前
【SSH 免密登录全流程】Windows Linux 通用方案
linux·windows·ssh
ScilogyHunter3 小时前
GCC完全指南
linux·gcc
CodeStats3 小时前
从 CPU 指令到 JVM 进程:彻底讲透 Java 执行 main 方法时,类加载、主线程、栈帧入栈的完整底层逻辑
java·linux·开发语言
努力努力再努力wz5 小时前
【内存管理与高并发内存池系列】从 mmap 到 malloc:文件映射、匿名映射与 glibc 内存分配机制详解
linux·c语言·数据结构·数据库·c++·qt·链表
Jurio.6 小时前
开源 Codex Sticky:在终端 Codex CLI 长对话中始终固定底部输入框
linux·rust·github·开源软件·codex·codex cli
无足鸟ICT6 小时前
【RHCA+】撤销和恢复撤销快捷键
linux
质造者6 小时前
LangChain + Ollama + Tavily 实现旅游问答系统
linux·人工智能·python·langchain·rag
starvapour6 小时前
Ubuntu部署gitlab频繁出现502的问题
linux·ubuntu·gitlab
zhangfeng11337 小时前
ps aux讲解,结合国家超算中心 hpc apptainer
linux·服务器·网络