我尝试使用glad从CMakeList.txt中运行python模块execute_process。
按照glad's git hub页面上的说明,我使用以下方法安装了它:
pip install --user glad
当我在终端模拟器中使用bash运行以下命令时,它按预期工作:
python -m glad --generator=c --no-loader --out-path=GL
同样适用于:
/home/boris/miniconda2/bin/python -m glad --generator=c --no-loader --out-path=GL
但是当我运行以下CMakeList.txt报告时,无法找到模块很高兴。
cmake_minimum_required(VERSION 3.0)
set (glad_arg "-m glad --generator=c --no-loader --out-path=GL")
set (glad_cmd "python")
message(STATUS "glad cmd: ${glad_cmd}")
execute_process(COMMAND ${glad_cmd} ${glad_arg}
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
RESULT_VARIABLE glad_result
OUTPUT_VARIABLE glad_ver
ERROR_VARIABLE glad_err)
message(STATUS "glad_err: ${glad_err}")
从项目的构建目录中运行../cmake时的输出:
boris-> cmake ..
-- glad cmd: python
-- glad_err: /home/boris/miniconda2/bin/python: No module named glad --generator=c --no-loader --out-path=GL
-- Configuring done
-- Generating done
-- Build files have been written to: /home/boris/Projects/OpenGL/SO/1_glad_In_Cmake/build
问题:为什么它不起作用,以及如何解决它?
答案 0 :(得分:2)
您对glad_arg
变量的定义包含单个值,因为您将其合并为双引号:
set (glad_arg "-m glad --generator=c --no-loader --out-path=GL") # Single value variable
因此,当您将${glad_arg}
传递给execute_process()
时,CMake将glad_arg
解释为单一功能参数。因此,当调用 COMMAND 时,它会将set (glad_arg -m glad --generator=c --no-loader --out-path=GL) # Variable with list of values.
的全部内容作为单个命令行参数。
定义 COMMAND 参数列表的正确方法是CMake列表。只需删除双引号:
CMAKE_C_FLAGS
大多数CMake命令适用于列表,并且不需要围绕整个值使用双引号。
最值得注意的例外是CMAKE_CXX_FLAGS
/ <?php
function test () {
$var = 'School';
return json_encode($var);
}
echo test();
个变量,它们应该是空格分隔的字符串(因此确实需要双引号)。