使用CMakelists.txt设置变量传入源代码

发布时间 2023-07-19 17:57:25作者: ATLAX

1.在CMakeLists.txt中使用ADD_DEFINITIONS()定义变量

cmake_minimum_required(VERSION 3.15)
project(test VERSION 0.1.0)


set(CMAKE_CXX_STANDARD 11)

include_directories(include)set(a "/home/wsw/test/c++")

#定义变量,用-D开头,后面跟字符串,相当于一个宏_VAR,其内容是一个字符串,\"是转义字符,${a}是一个引用变量,用上面的set(a "/home/wsw/test/c++")中的字符串替换

ADD_DEFINITIONS(-D_VAR=\"${a}\")add_executable(test src/testadd.cpp)

2.在源代码中使用变量

#include <iostream>
// #ifdef _VAR
// #define TXT _VAR
// #else
// #define TXT "nobody"
// #endif
int main(int argc, char* argv[]){
    printf("%s\n",_VAR);
    std::cout<<"hello"<<_VAR<<std::endl;
}

3.Cmake常用预定义变量

(1) PROJECT_SOURCE_DIR

cmake命令后紧跟的目录, 一般是工程的根目录.

(2) PROJECT_BINARY_DIR

执行cmake命令的目录, 通常是${PROJECT_SOURCE_DIR}/build

(3) CMAKE_CURRENT_SOURCE_DIR

当前处理的CMakeLists.txt所在路径

(4) CMAKE_CURRENT_BINARY_DIR

target编译目录, 使用ADD_SUBDIRECTORY(src bin)可以更改此变量的值, SET(EXECUTABLE_OUTPUT_PATH <新路径 > ) 并不会对此变量有影响, 只是改变了最终目录文件的存储路径

(5) CMAKE_CURRENT_LIST_FILE

输出调用这个变量的CMakeLists.txt的完整路径

(6) CMAKE_CURRENT_LIST_LINE

输出这个变量所在的行

(7) CMAKE_MODULE_PATH

定义自己的cmake模块所在路径, 这个变量用于定义自己的cmake模块所在的路径, 如果你的工程比较复杂, 有可能自己编写一些cmake模块,

(8)EXECUTABLE_OUTPUT_PATH

重新定义目录二进制可执行文件的存放位置

(9) LIBRARY_OUTPUT_PATH

重新定义目标链接库文件的存放位置

(10) PROJECT_NAME

返回通过PROJECt指令定义的项目名称

环境变量

(1) 使用$ENV{NAME}可以调用系统的环境变量,比如:

MESSAGE(STATUS “HOME dir:”$ENV{HOME})

(2) 设置环境变量的方式, SET(ENV{name},value)

(3) CMAKE_INCLUDE_CURRENT_DIR

(4) CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE

将工程提供的头文件目录始终至于系统头文件目录的前面, 当你定义 的头文件确实跟系统发生冲突时可以提供一些帮助.

(5) CMAKE_INCLUDE_PATH , CMAKE_LIBRARY_PATH

开关选项

(1) BUILD_SHARED_LIBS

控制默认的库编译方式, 如果未进行设置, 使用ADD_LIBRARY时又没有指定库类型默认编译生成的库都是静态库

(2) CMAKE_C_FLAGS

设置C编译选项

(3) CMAKE_CXX_FLAGS

设置C++编译选项

(4) CMAKE_C_COMPILER

指定C编译 器

(5)CMAKE_CXX_COMPILER

指定C++编译器

(6) CMAKE_BUILD_TYPE

build类型(Debug, Release....)


引用:

1,2.https://blog.csdn.net/jinking01/article/details/109134089?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-3-109134089-blog-110838219.235%5Ev38%5Epc_relevant_default_base&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-3-109134089-blog-110838219.235%5Ev38%5Epc_relevant_default_base&utm_relevant_index=4

3.https://blog.csdn.net/CHS007chs/article/details/97102081