cmake模块需要遵守NO_SYSTEM_ENVIRONMENT_PATH之类的定义

时间:2018-04-17 06:14:07

标签: path cmake system environment

我需要非常严格地确定我的软件链接到哪些外部软件包。要做到这一点,我设置

-DCMAKE_FIND_ROOT_PATH=/root/of/software/that/the/build/may/use
-DNO_CMAKE_SYSTEM_PATH=true
-DNO_SYSTEM_ENVIRONMENT_PATH=true
-DNO_DEFAULT_PATH=true

似乎有些cmake模块不遵守这些设置。一个例子是随cmake 3.8.1提供的FindTCL.cmake。这里摘自文件:

set(TCLTK_POSSIBLE_INCLUDE_PATHS
  "${TCL_LIBRARY_PATH_PARENT}/include"
  "${TCL_INCLUDE_PATH}"
  ${TCL_FRAMEWORK_INCLUDES}
  "${TCL_TCLSH_PATH_PARENT}/include"
  /usr/include/tcl${TCL_LIBRARY_VERSION}
  /usr/include/tcl8.6
  ...
)

if(WIN32)
  set(TCLTK_POSSIBLE_INCLUDE_PATHS ${TCLTK_POSSIBLE_INCLUDE_PATHS}
  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.6;Root]/include"
  ...
  "$ENV{ProgramFiles}/Tcl/include"
  "C:/Program Files/Tcl/include"
  "C:/Tcl/include"
  )
endif()

find_path(TCL_INCLUDE_PATH
  NAMES tcl.h
  HINTS ${TCLTK_POSSIBLE_INCLUDE_PATHS}
)

这导致我使用Windows上的Active State安装和Linux上的/ usr / include使用Tcl进行构建,这是我没想到的。 FindTCL.cmake应该尊重NO_SYSTEM_ENVIRONMENT_PATH(以及类似设置)并且如果设置了,则不添加ActiveState和/ usr / include吗?

1 个答案:

答案 0 :(得分:0)

NO_CMAKE_SYSTEM_PATH NO_SYSTEM_ENVIRONMENT_PATH NO_DEFAULT_PATH 不是变量,而是find_libraryfind_*的选项其他CMAKE_命令。

(对CMake variable事物的简单测试:大多数CMake 变量都以CMAKE_FIND_ROOT_PATH_*为前缀。)

设置 CMAKE_FIND_ROOT_PATH 变量时,可以通过-DCMAKE_FIND_ROOT_PATH_INCLUDE=ONLY # search header files only under root path -DCMAKE_FIND_ROOT_PATH_LIBRARY=ONLY # search libraries only under root path -DCMAKE_FIND_ROOT_PATH_PROGRAM=ONLY # search programs only under root path -DCMAKE_FIND_ROOT_PATH_PACKAGE=ONLY # search packages only under root path 变量“family”禁用其他搜索路径:

${CMAKE_FIND_ROOT_PATH}/usr/lib

注意,CMake的CMAKE_FIND_ROOT_PATH变量意味着“文件系统重新root”。例如。在Linux上,它期望${CMAKE_FIND_ROOT_PATH}下的库。但是,要查找安装到-DCMAKE_FIND_ROOT_PATH=/root/of/software/that/the/build/may/use -DCMAKE_PREFIX_PATH=/ 目录中的库,您可以另外设置

-DCMAKE_PREFIX_PATH=/root/of/software/that/the/build/may/use

如果您的目录只是库的集合,并且库中安装了库(该目录用作安装前缀),则更自然地设置CMAKE_PREFIX_PATH变量:

CMAKE_PREFIX_PATH

注意,import pandas as pd df = pd.read_excel("/your/excel/here/TEST.xlsx") print("mat =", df.values.tolist()) 变量只是首选项:如果CMake在此处找不到库,它将继续搜索系统特定的目录。

相关问题