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

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

文章目录

  • C/C++ 代码中使用 CMake 工程目录
    • 使用原因
    • 如何使用
    • 参考链接

使用原因

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

如果调试时需要使用工程路径下的配置文件,就需要每次修改配置文件时,都需要将配置文件进行拷贝更新到运行目录下,虽然 CMake 也提供指令用于拷贝文件,但还是很麻烦

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

  • 包含 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. 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;
}

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

cd build
cmake ..

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

C/C++ 代码中使用 CMake 工程目录_第1张图片
此时运行,则会打印

project path:D:/WorkSpace/CMakeTest

见图 C/C++ 代码中使用 CMake 工程目录_第2张图片

参考链接

  • CMake 官网 PROJECT_SOURCE_DIR 变量https://cmake.org/cmake/help/latest/variable/PROJECT_SOURCE_DIR.html#variable:PROJECT_SOURCE_DIR
  • CMake 官网 cmake 变量
    https://cmake.org/cmake/help/latest/manual/cmake-variables.7.html

你可能感兴趣的:(C++,CMake,c语言,c++,cmake)