在CMake中打电话给Glad

时间:2017-07-17 16:30:48

标签: python linux bash cmake

我尝试使用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

问题:为什么它不起作用,以及如何解决它?

1 个答案:

答案 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(); 个变量,它们应该是空格分隔的字符串(因此确实需要双引号)。

相关问题