【cmake开发(11)】CMake中的CMAKE_PREFIX_PATH使用技巧与示例

一、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

  • 11
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个基本的 CMake iOS 示例: ``` cmake_minimum_required(VERSION 3.12) project(MyApp) # 设置 iOS 目标平台 set(CMAKE_OSX_SYSROOT "iphoneos") # 设置编译器和架构 set(CMAKE_C_COMPILER "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang") set(CMAKE_CXX_COMPILER "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++") set(CMAKE_XCODE_ATTRIBUTE_ARCHS "armv7;arm64") # 添加源文件 add_executable(MyApp main.cpp) # 设置输出路径 set_target_properties(MyApp PROPERTIES ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin" LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin" RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin" ) # 设置编译选项 target_compile_options(MyApp PRIVATE -std=c++14 ) # 设置链接选项 target_link_options(MyApp PRIVATE -stdlib=libc++ ) # 安装目标 install(TARGETS MyApp DESTINATION ${CMAKE_INSTALL_PREFIX} ) ``` 这个示例使用CMake 的基本功能,包括添加源文件、设置输出路径、编译选项和链接选项等。此外,它还设置了 iOS 目标平台、编译器和架构,并使用了 install 命令安装目标。 要使用这个示例,你需要将代码保存为 CMakeLists.txt 文件,并使用以下命令编译和安装目标: ``` mkdir build cd build cmake -DCMAKE_INSTALL_PREFIX=/path/to/install .. make make install ``` 你需要将 /path/to/install 替换为你想要安装目标的路径。此外,你还需要在 Xcode 设置正确的开发者证书和目标设备,以便在 iOS 上运行这个应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值