如何通过命令行向CMakeLists.txt中的VAR1传递自定义值?
从命令行给CMake传递变量值的方法
当然可以!CMake完全支持通过命令行参数传递变量值,不需要把数值硬编码在CMakeLists.txt里,下面是两种实用的实现方式:
方法一:使用-D参数直接传递
这是最常用的方式,在执行cmake命令时通过-D<变量名>=<值>的格式传递参数。
步骤1:修改CMakeLists.txt(可选但推荐)
为了让变量有默认值(当命令行没传参时生效),可以把原来的set(VAR1 1)改成带缓存的设置,或者判断变量是否已定义:
# 方式A:用CACHE设置默认值,同时允许命令行覆盖 set(VAR1 1 CACHE INTEGER "自定义变量VAR1的描述,会在cmake-gui中显示") # 方式B:仅当变量未定义时设置默认值 if(NOT DEFINED VAR1) set(VAR1 1) endif()
步骤2:命令行传递参数
在执行cmake配置时,直接附加-DVAR1=<你想要的值>即可:
# 示例:传递VAR1=5 cmake .. -DVAR1=5
这样CMake就会使用你从命令行传入的5作为VAR1的值,而不是默认的1。
方法二:通过环境变量传递(可选)
如果偏好使用环境变量,也可以在系统环境中设置变量,然后在CMakeLists.txt中读取:
# 读取环境变量,如果环境变量没设置则用默认值 set(VAR1 $ENV{VAR1} CACHE INTEGER "自定义变量VAR1") if(NOT VAR1) set(VAR1 1) endif()
然后在执行cmake前先设置环境变量(以bash为例):
export VAR1=3 cmake ..
注意事项
- 变量名区分大小写,
-DVAR1和-Dvar1是两个不同的变量; - 如果是布尔类型变量,建议传递
ON/OFF而不是1/0,CMake会自动识别; - 如果使用
cmake-gui或者ccmake,这些通过命令行传递的变量会显示在缓存列表中,也可以手动修改。
内容的提问来源于stack exchange,提问作者Valeria
相关产品推荐
相关产品推荐

