我需要非常严格地确定我的软件链接到哪些外部软件包。要做到这一点,我设置
-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吗?
答案 0 :(得分:0)
NO_CMAKE_SYSTEM_PATH , NO_SYSTEM_ENVIRONMENT_PATH 和 NO_DEFAULT_PATH 不是变量,而是find_library
和find_*
的选项其他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在此处找不到库,它将继续搜索系统特定的目录。