如何在 cmake 中使用宏
How to use macro in cmake?
本文关键字:cmake 更新时间:2023-10-16
我正在尝试使用给定的宏来编译我的C++程序?
MACRO(HEADER_DIRECTORIES return_list)
FILE(GLOB_RECURSE new_list *.h)
SET(dir_list "")
FOREACH(file_path ${new_list})
GET_FILENAME_COMPONENT(dir_path ${file_path} PATH)
SET(dir_list ${dir_list} ${dir_path})
ENDFOREACH()
LIST(REMOVE_DUPLICATES dir_list)
SET(${return_list} ${dir_list})
ENDMACRO()
有人可以告诉我如何将参数传递给micro ans使用返回列表来包含目录吗?
你可以像在 C 中一样调用函数(或宏),使用它的名称。名称由括号内的第一个字符串定义 - 因此您可以像这样调用宏:
header_directories(...)
您的宏需要单个参数 - 一个变量 - 因此您的CMakeLists.txt
将如下所示:
cmake_minimum_required(VERSION 3.13)
macro(header_directories return_list)
file(GLOB_RECURSE new_list *.h)
set(dir_list "")
foreach(file_path ${new_list})
get_filename_component(dir_path ${file_path} PATH)
set(dir_list ${dir_list} ${dir_path})
endforeach()
list(REMOVE_DUPLICATES dir_list)
set(${return_list} ${dir_list})
endmacro()
header_directories(foobar_list)
message(${foobar_list})
在如下所示的目录中
CMakeLists.txt
include/
foo.h
输出将如下所示:
$ cmake .
/.../directoryname/include
-- Configuring done
-- Generating done
-- Build files have been written to: /.../directoryname/
如果您现在想使用宏生成的列表来包含这些目录,只需使用
include_directories(${foobar_list})
或者,甚至更好
target_include_directories(<target> <INTERFACE|PUBLIC|PRIVATE> ${foobar_list})
请注意,CMake 中的函数和宏不支持经典返回值 - 从某种意义上说,您可能习惯于 使用 C。
在宏中,您可以简单地创建一个新变量(或使用作为参数传递的变量 - 如上所述),在函数中,您可以使用 PARENT_SCOPE
关键字向调用者的传递变量写入一些内容:
function(func result_variable)
set(${result_variable} "result" PARENT_SCOPE)
endfunction()
func(ret)
message(${ret})
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用CMake创建QML插件
- cmake如何在fedora工作站中找到boost静态库包
- 使用CMake检测支持的C++标准
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 如何使用CMake编译.proto文件来生成.grpcp.pb.cc和.grpc.pb.h文件
- cmake在我的项目中所需的所有静态库都不成功
- 在CMakeLists.txt的安装功能中使用.cmake文件有什么用
- 无法链接 CMake 中的本地库
- libssh 的函数在构建 libssh 时无法在 Qt 和 cmake 错误中找到
- 如何在Ubuntu中使用cmake设置qt4
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- 为什么 cmake 许可证<>样式不包括?
- cmake更新缓存的变量
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 使外部项目可用于find_package CMake
- 生成MRPT库时cmake配置失败
- 使用VS Code和CMake Tools运行自定义命令