使用CMakelists.txt设置变量传入源代码
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通