一、CMAKE_PREFIX_PATH的基本概念

1、CMAKE_PREFIX_PATH用于指示CMake在查找包和项目所需库文件时的路径。在构建项目时,它可以帮助CMake定位库文件,头文件和执行文件等。当项目的库文件或头文件不在CMake默认的查找路径中时,可以通过设置CMAKE_PREFIX_PATH变量来为CMake提供额外的查找路径,从而缩短构建时间并提高构建成功率。

2、CMAKE_PREFIX_PATH可以设定为绝对路径或相对路径,通常情况下,推荐使用绝对路径。此外,CMAKE_PREFIX_PATH可以设置多个查找路径,不同的路径间使用分号(;)分隔。在CMakeLists.txt文件中,可以通过set命令来设置CMAKE_PREFIX_PATH变量。

3、需要注意的是,CMAKE_PREFIX_PATH是一个全局变量,其对所有的CMakeLists文件都起效。因此,设置CMAKE_PREFIX_PATH的位置通常在项目的根目录下的CMakeLists.txt中。

二、CMAKE_PREFIX_PATH的应用场景

1、CMAKE_PREFIX_PATH经常应用于预编译库的查找。当项目依赖于第三方库,并且这些库已经事先编译好,或直接从包管理器(例如:apt-get、yum等)中获取到的,请直接使用这些库而不进行再次编译时,可以设置CMAKE_PREFIX_PATH来告知CMake进行查找。

2、CMAKE_PREFIX_PATH还可用于不同平台或工具链下的构建。例如在跨平台开发时,可能有多个平台的库文件同时存在于源码同一目录下。这时我们可以在CMakeLists.txt文件中,根据不同的构建平台或工具链,动态修改CMAKE_PREFIX_PATH的值,从而确保正确的库文件会被链接到目标可执行文件中。

3、CMAKE_PREFIX_PATH也可以用于指定测试用例中的库文件。当项目需要对各个模块进行单元测试,并且这些模块依赖于不同版本的库文件时,可以通过设置CMAKE_PREFIX_PATH来动态的切换不同版本的库文件,以便在构建测试用例时能够正确链接。

三、设置CMAKE_PREFIX_PATH的方法

1、首先, 在CMakeLists.txt文件中使用set命令设置CMAKE_PREFIX_PATH的值,如下所示:

set(CMAKE_PREFIX_PATH /path/to/libA;/path/to/libB)

2、其次,可以通过命令行方式指定CMAKE_PREFIX_PATH的值。在执行cmake命令时,使用-D参数设置CMAKE_PREFIX_PATH变量,如下所示:

cmake .. -DCMAKE_PREFIX_PATH=/path/to/libA;/path/to/libB

3、此外,还可以将CMAKE_PREFIX_PATH设置为环境变量,这样CMake会自动从环境中读取CMAKE_PREFIX_PATH的值。在Linux系统下,可使用如下命令设置:

export CMAKE_PREFIX_PATH=/path/to/libA:/path/to/libB

在Windows系统下,需要使用如下命令设置:

set CMAKE_PREFIX_PATH=/path/to/libA;/path/to/libB

注意路径带上 引号!!!!

四、CMAKE_PREFIX_PATH实际应用示例

假设有一个项目依赖于两个库:LibA和LibB。这两个库的头文件和库文件分别存储在"/path/to/libA/include"、“/path/to/libA/lib”、“/path/to/libB/include"和”/path/to/libB/lib"这四个文件夹中。现在需要在CMakeLists.txt文件中设置CMAKE_PREFIX_PATH,以便CMake能够找到这些库。

首先,在项目的根目录下创建一个名为CMakeLists.txt的文件,并编写如下内容:

cmake_minimum_required(VERSION 3.0)
project(example_project)
set(CMAKE_PREFIX_PATH /path/to/libA;/path/to/libB)
find_package(LibA REQUIRED)
find_package(LibB REQUIRED)
add_executable(example_project main.cpp)
target_include_directories(example_project PRIVATE ${LibA_INCLUDE_DIRS} ${LibB_INCLUDE_DIRS})
target_link_libraries(example_project ${LibA_LIBRARIES} ${LibB_LIBRARIES})

上面的CMakeLists.txt文件中,首先使用set命令设置了CMAKE_PREFIX_PATH的值,然后使用find_package命令寻找依赖的两个库。最后,为目标可执行文件example_project添加了库文件路径和库文件。
五、CMAKE_PREFIX_PATH与其他查找路径的关系

1、除了CMAKE_PREFIX_PATH外,CMake还有其他几个相关的变量,如CMAKE_INCLUDE_PATH、CMAKE_LIBRARY_PATH等。这些变量可以理解为CMAKE_PREFIX_PATH的子集。例如,当设置了CMAKE_INCLUDE_PATH后,CMake会在指定路径下搜索头文件。同样,设置CMAKE_LIBRARY_PATH后,CMake会在指定路径下搜索库文件。

2、在实际应用中,如果确定项目只需要查找头文件或库文件,可以使用CMAKE_INCLUDE_PATH或CMAKE_LIBRARY_PATH。这样做的好处是提高了查找效率,降低了构建时间。但是,如果项目需要同时查找头文件和库文件,推荐使用CMAKE_PREFIX_PATH。

3、需要注意的是,设置了CMAKE_PREFIX_PATH时,CMake会优先在CMAKE_PREFIX_PATH指定的路径下查找。如果没有找到,CMake会进一步在默认查找路径、CMAKE_INCLUDE_PATH或CMAKE_LIBRARY_PATH指定的路径下进行查找。因此,在设置CMAKE_PREFIX_PATH时,需要确保其值的正确性,以避免出现查找失败的情况。

https://www.python100.com/html/Y549F47DXKT9.html

是一个关键变量,用于指定项目的安装根目录。通过正确设置这个变量,可以灵活地控制项目的安装位置,满足不同的部署需求。无论是全局安装、用户本地安装,还是特定目录安装,都能提供强大的支持。在开发空间: 在构建过程,Catkin 默认将可执行文件放置在devel目录,以便可以立即运行和测试这些文件,而无需执行安装步骤。目录结构是 Catkin 默认的可执行文件输出路径。如果需要将可执行文件安装到其他位置,请使用或,并确保在的正确配置了install命令。 CMake命令:find_package、make instal、make --build .、CMAKE_PREFIX_PATH、add_compile_options、set_property用法介绍 假设我需要使用第三方库去做一些事情,如何在配置体现这种依赖关系?ind_package旨在使用预先设置的配置文件来查找依赖项, 主要用的参数如下: PACKAGE_NAME_CASE_SENSITIVEversionEXACTQUIETCONFIG 对于上述前两个变量/列表而言,cmake会在每一条的以下扩展路径查找配置文件: .. 表示上层目录 -D 相当于就是定义, -D 可以理解为告诉cmake 后边我要定义一些参数了, 你每定义一个就在前边加上-D就是了 CMAKE_PREFIX_PATH是要编译的WENJIADE路径 CMAKE_BUILD_TYPE 是要编译的类型, 一般的选... 这些变量通常在CMake项目的配置文件(例如CMakeLists.txt文件)设置。通过正确配置这些变量,你可以定制CMake项目的构建和安装行为,以适应项目的需求和环境。 cmake_minimum_required(VERSION 2.8.2 FATAL_ERROR)project("ProjName")// 不推荐使用add_definitions来设置编译选项,因为其作用如同cmake -D add_definitions( -std=c++11 # Or -std=c++0x -Wall -Wfatal-errors -DXXX 两个cmake参数很像,查看了官方文档 CMAKE_PREFIX_PATH是以分号分隔的列表,供find_package(), find_program(), find_library(), find_file()和find_path()使用,初始为空,由用户设定 CMAKE_PREFIX_PATH 官方链接 CMAKE_MODULE_PATH是以分号分隔的列表,供include()或 find_...