在 CMake 中,你可以通过设置不同的编译选项和宏定义来编译两个不同的应用程序。以下是一个示例,展示了如何在同一个 CMakeLists.txt 文件中编译两个应用程序,其中一个应用程序启用宏定义,另一个则不启用。
示例项目结构
假设你的项目结构如下:
project/
├── CMakeLists.txt
├── src/
│ ├── main.cpp
│ ├── app1.cpp
│ ├── app1.h
│ ├── app2.cpp
│ └── app2.h
└── include/
└── common.h
CMakeLists.txt 文件
cmake_minimum_required(VERSION 3.10)
project(MyProject)
# 设置包含目录
include_directories(include)
# 查找源文件
file(GLOB APP1_SOURCES "src/app1.cpp" "src/main.cpp")
file(GLOB APP2_SOURCES "src/app2.cpp" "src/main.cpp")
# 创建第一个应用程序并启用宏定义
add_executable(app1 ${APP1_SOURCES})
target_compile_definitions(app1 PRIVATE ENABLE_MACRO)
# 创建第二个应用程序,不启用宏定义
add_executable(app2 ${APP2_SOURCES})
# 设置编译选项(如果需要)
target_compile_options(app1 PRIVATE -Wall -Wextra)
target_compile_options(app2 PRIVATE -Wall -Wextra)
示例源文件
src/main.cpp
#include "common.h"
#include <iostream>
int main() {
#ifdef ENABLE_MACRO
std::cout << "App1 with macro enabled" << std::endl;
#else
std::cout << "App2 without macro" << std::endl;
#endif
return 0;
}
src/app1.cpp
#include "app1.h"
// 实现 app1 的相关功能
src/app2.cpp
#include "app2.h"
// 实现 app2 的相关功能
include/common.h
#pragma once
// 公共头文件内容
编译和运行
# 配置构建系统
mkdir build
cd build
cmake ..
# 编译两个应用程序
make
#运行应用程序
./app1
./app2
通过这些步骤,你可以在同一个 CMake 项目中编译两个不同的应用程序,其中一个启用宏定义,另一个不启用。