- 工程目录结构如下:

- 根目录下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}"
- 根目录下的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)
- 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)
- tools目录下的CMakeLists.txt文件内容如下:
bash
add_subdirectory(test)
- 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
)