• C/C++ 代码中使用 CMake 工程目录


    C/C++ 代码中使用 CMake 工程目录

    使用原因

    在 C++ 代码中获取工程路径有点繁琐,因为如果生成的可执行文件(.exe) 位置与工程目录不同,则当前的路径为运行时的路径,可能需要通过很多的 ../.. 来定位到工程目录,甚至由于权限问题运行目录在 C 盘系统路径,以及由于迭代更新生成路径发生变化…

    如果调试使用工程路径下的文件,比如配置文件时,在每次修改配置文件后,都需要将配置文件进行拷贝更新到运行目录下才能调试,虽然 CMake 也提供指令用于拷贝文件(如 file),但依旧很繁琐。

    关于获取当前目录的方法有

    • 包含 Windows.h , 调用 GetModuleFileName(nullptr, buffer, sizeof(char) * szBuff),buffer 内容即为当前目录路径, (Win 平台)
    • 包含 direct.h, 调用 char* _getcwd(char* buffer, size_t length) 方法, (Win 平台)
    • 包含 unistd.h ,调用 getcwd(char* buffer, size_t length) 方法,(Linux 平台)

    如何使用

    需要用到 CMake 中的变量 PROJECT_SOURCE_DIR,此变量的内容为当前目录或其父目录范围中最后一次调用 project() 命令的 CMakeLists.txt 所在目录。

    在工程只有一个单一目录时,也可以使用 CMAKE_CURRENT_SOURCE_DIR,或 CMAKE_SOURCE_DIR 变量

    CMAKE_CURRENT_SOURCE_DIRCMAKE_SOURCE_DIR 的区别:

    变量名概述
    CMAKE_CURRENT_SOURCE_DIR当前 CMakeLists.txt 所在的目录
    CMAKE_SOURCE_DIR最外层的 CMakeLists.txt 所在的目录

    由于单一目录通常只有一个 CMakeLists.txt 文件,所以此处无差别。

    首先来创建一个简单的 CMakeLists.txt

    # 设置 CMake 最低版本要求
    cmake_minimum_required(VERSION 3.0)
    
    # 设置使用 C++ 标准为 C++17
    set(CMAKE_CXX_STANDARD 17)
    
    # 创建工程,设置工程名称 CMakeTest
    project(CMakeTest)
    
    # 规定头文件的包含路径
    include_directories(${PROJECT_SOURCE_DIR})
    
    # 生成可执行文件 只包含一个 main.cpp 文件
    add_executable(${PROJECT_NAME} main.cpp)
    
    # 创建我们的宏 PROJECT_PATH
    add_definitions(-DPROJECT_PATH="${PROJECT_SOURCE_DIR}")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    注意

    1. cmake 变量两边的双引号 (") 一定要加,否则不为字符串,在生成时出现问题。
    2. 双引号不需要使用反斜杠 (\) 标识转义,\" 在 CMakeLists.txt 中与 " 等价。
    3. cmake 变量使用需要加上花括号,并前置 $ 符号

    然后写主 cpp 文件

    #include 
    #include 
    
    int main(int argc, char* argv[])
    {
    	std::string path(PROJECT_PATH);
    	std::cout << "project path:" << path << std::endl;
    
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在同一目录下创建 build 目录,用于创建 CMake 生成文件和工程文件等。接下来生成工程

    cd build
    cmake ..
    
    • 1
    • 2

    使用 Visual Studio 打开 build 目录下的 .sln文件 (解决方案文件 Solution),此时将鼠标放在宏上方即可看到此宏已被扩展为了 PROJECT_SOURCE_DIR 的内容

    在这里插入图片描述
    此时运行,则会打印

    project path:D:/WorkSpace/CMakeTest
    
    • 1

    见图 在这里插入图片描述

    参考链接

  • 相关阅读:
    PocketMiner:基于深度学习发现蛋白的隐式口袋
    WPF监控平台(科技大屏)[一]
    从token中获取用户信息
    AIGC,全能摧毁
    Tomcat多实例、负载均衡、动静分离
    5G工业互联网的“下半场”该拼什么?
    FreeMarker详细介绍
    【选型】JAVA生成PPT及选型
    C++课堂整理--第一章内容
    1.4 内网穿透与通知、查询用户订单
  • 原文地址:https://blog.csdn.net/weixin_44488341/article/details/132814321