Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CMake-检查是否安装了Pylint_Cmake_Pylint - Fatal编程技术网

CMake-检查是否安装了Pylint

CMake-检查是否安装了Pylint,cmake,pylint,Cmake,Pylint,我使用Cmake检查目录中的所有.py文件,并使用Pylint检测错误和检查编码标准 是否有办法检查Pylint是否使用cmake安装?此代码是否独立于操作系统(例如Ubuntu和Windows)?您应该创建一个FindPylint.cmake文件并include()其目录。然后运行查找包(需要Pylint) FindPylint.cmake: execute_process( COMMAND pylint --version OUTPUT_VARIABLE pylint_out

我使用Cmake检查目录中的所有.py文件,并使用Pylint检测错误和检查编码标准


是否有办法检查Pylint是否使用cmake安装?此代码是否独立于操作系统(例如Ubuntu和Windows)?

您应该创建一个FindPylint.cmake文件并
include()
其目录。然后运行
查找包(需要Pylint)

FindPylint.cmake:

execute_process(
    COMMAND pylint --version
    OUTPUT_VARIABLE pylint_out
    RESULT_VARIABLE pylint_error
    ERROR_VARIABLE pylint_suppress)

if (NOT pylint_error)
    string(REGEX MATCH "pylint .\..\.." pylint_version_string "${pylint_out}")
    string(SUBSTRING "${pylint_version_string}" 7 5 pylint_version)
endif ()

if (pylint_version)
    set(PYLINT_FOUND 1
        CACHE INTERNAL "Pylint version ${pylint_version} found")
endif ()

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(Pylint REQUIRED_VARS pylint_version
                                    VERSION_VAR pylint_version)
一些解释:

  • 错误输出实际上不是一个错误,它使用默认配置读取
    未找到配置文件,因此我们通过忽略
    pylint\u suppress
    变量来抑制它
  • pylint
    输出的不仅仅是版本,因此我们需要进行一些正则表达式/字符串处理
  • CACHE INTERNAL
    变量严格来说不是必需的,但稍后可以用于检查是否找到Pylint

CMakeLists.txt

list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR})

find_package ( Pylint )

if ( PYLINT_FOUND )
  message ( STATUS "pylint version: ${PYLINT_VERSION}" )
endif ()
# - Find Pylint
# Find the Pylint executable and extract the version number
#
# OUTPUT Variables
#
#   PYLINT_FOUND
#       True if the pylint package was found
#   PYLINT_EXECUTABLE
#       The pylint executable location
#   PYLINT_VERSION
#       A string denoting the version of pylint that has been found

find_program ( PYLINT_EXECUTABLE pylint PATHS /usr/bin )

if ( PYLINT_EXECUTABLE )
  execute_process ( COMMAND ${PYLINT_EXECUTABLE} --version OUTPUT_VARIABLE PYLINT_VERSION_RAW ERROR_QUIET )
  if (PYLINT_VERSION_RAW)
    string ( REGEX REPLACE "^pylint ([0-9]+.[0-9]+.[0-9]+),.*" "\\1" PYLINT_VERSION ${PYLINT_VERSION_RAW})
  else ()
    set ( PYLINT_VERSION "unknown" )
  endif()
endif ()

include(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS ( Pylint DEFAULT_MSG PYLINT_EXECUTABLE )

mark_as_advanced ( PYLINT_EXECUTABLE PYLINT_VERSION )
并在同一目录中添加FindPylint.cmake

list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR})

find_package ( Pylint )

if ( PYLINT_FOUND )
  message ( STATUS "pylint version: ${PYLINT_VERSION}" )
endif ()
# - Find Pylint
# Find the Pylint executable and extract the version number
#
# OUTPUT Variables
#
#   PYLINT_FOUND
#       True if the pylint package was found
#   PYLINT_EXECUTABLE
#       The pylint executable location
#   PYLINT_VERSION
#       A string denoting the version of pylint that has been found

find_program ( PYLINT_EXECUTABLE pylint PATHS /usr/bin )

if ( PYLINT_EXECUTABLE )
  execute_process ( COMMAND ${PYLINT_EXECUTABLE} --version OUTPUT_VARIABLE PYLINT_VERSION_RAW ERROR_QUIET )
  if (PYLINT_VERSION_RAW)
    string ( REGEX REPLACE "^pylint ([0-9]+.[0-9]+.[0-9]+),.*" "\\1" PYLINT_VERSION ${PYLINT_VERSION_RAW})
  else ()
    set ( PYLINT_VERSION "unknown" )
  endif()
endif ()

include(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS ( Pylint DEFAULT_MSG PYLINT_EXECUTABLE )

mark_as_advanced ( PYLINT_EXECUTABLE PYLINT_VERSION )

基于此。

看看CMake的findLatex文件,在那里您可以学习如何检查可执行文件。您可以使用execute_命令运行它。后者的示例在最近的CMake版本中的FindDoxygen和FindGit中。请尝试以下操作:
列表(追加CMake_模块_路径${CMake_当前_源代码_目录})
有效!现在我发现:
解析字符串pylint时,cmake代码中的语法错误位于…/FindPylint.cmake:8。\。。无效的转义序列\。
哪个版本的CMake?我使用的是3.5.1版。我刚刚发现:可能需要两个“\\”来转义“点”。奇怪,因为它对我有用。