• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
MKT-porter
博客园    首页    新随笔    联系   管理    订阅  订阅
c++ Cmake工程(1)同级目录

A类调用了B类,C主函数调用A和B

 

 

 

 

 A.h

#ifndef A_H
#define A_H

#include <iostream>


//#include "../folder2/B.h" // 正常情况
//# 包含根目录 A.h可以直接引用 B.h
//target_include_directories(folder1_lib PUBLIC ${CMAKE_SOURCE_DIR})
#include "folder2/B.h" // 特殊情况

class A {
public:
    void doSomething();
};

#endif // A_H

  

  A.cpp

#include "A.h"

void A::doSomething() {
    std::cout << "Class A is doing something." << std::endl;

    B b;
    b.performAction();
}

  

 B.h

#ifndef B_H
#define B_H

#include <iostream>

class B {
public:
    void performAction();
};

#endif // B_H

 B.cpp

 

#include "B.h"

void B::performAction() {
    std::cout << "Class B is performing an action." << std::endl;
}

  

 main.cpp

// 直接路径 没有经过 target_include_directories(main PRIVATE ${CMAKE_SOURCE_DIR})
#include "folder1/A.h"
#include "folder2/B.h"

int main() {
    A a;
    B b;

    // 调用 A 类的函数
    a.doSomething();

    // 调用 B 类的函数
    b.performAction();

    return 0;
}

  

 CMakeLists_1 最简单 直接相对路径调用文件.txt

cmake_minimum_required(VERSION 3.5)
project(MyProject)

# Set C++ standard
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# Include directories
include_directories(${CMAKE_SOURCE_DIR}/folder1)
include_directories(${CMAKE_SOURCE_DIR}/folder2)

# Source files in folders
set(folder1_sources
    folder1/A.cpp
)

set(folder2_sources
    folder2/B.cpp
)

# Main executable
add_executable(main main.cpp ${folder1_sources} ${folder2_sources})

  

CMakeLists_2 中等 编译成库调用.txt

cmake_minimum_required(VERSION 3.0)
project(MyProject)

# 设置编译选项
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

#project_folder/
#│
#├── CMakeLists.txt
#├── folder1/
#│   ├── A.h
#│   └── A.cpp
#│
#└── folder2/
#    ├── B.h
#    └── B.cpp


# 添加文件夹1中的源文件
add_library(folder1_sources
    folder1/A.cpp
)

# 添加文件夹2中的源文件
add_library(folder2_sources
    folder2/B.cpp
)

# 添加可执行文件并链接两个库
add_executable(main_executable main.cpp)
target_link_libraries(main_executable folder1_sources folder2_sources)

# 添加包含文件夹的路径 应该无用 这里有用是因为main.c和folder1 folder2在同级目录
target_include_directories(folder1_sources PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/folder1) target_include_directories(folder2_sources PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/folder2)

 

CMakeLists.txt 3最简洁但是难以理解的方案

 

 

cmake_minimum_required(VERSION 3.5)
project(MyProject)

# Set C++ standard
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# Add subdirectories
add_subdirectory(folder1)
add_subdirectory(folder2)


# Main executable
add_executable(main main.cpp)

target_include_directories(main PRIVATE ${CMAKE_SOURCE_DIR}) # 避免相对路径使用 但是main本来就是相对路径

# Link main executable with folder1_lib and folder2_lib
target_link_libraries(main PRIVATE folder1_lib folder2_lib)

  

 

# Create a library for folder1 (assuming A.cpp is compiled into a library)
add_library(folder1_lib A.cpp A.h)

# 包含根目录 A.h可以直接引用 B.h
target_include_directories(folder1_lib PUBLIC ${CMAKE_SOURCE_DIR})

# Link folder1_lib with folder2_lib (assuming it uses B from folder2)
target_link_libraries(folder1_lib PUBLIC folder2_lib)

  

 

# Create a library for folder2 (assuming B.cpp is compiled into a library)
add_library(folder2_lib B.cpp B.h)

# Set include directories for folder2 (optional, if needed)
target_include_directories(folder2_lib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})

  

posted on 2024-08-03 05:11  MKT-porter  阅读(35)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3