[转]关于cmake --build .的理解

https://blog.csdn.net/qq_38563206/article/details/126486183

https://blog.csdn.net/HandsomeHong/article/details/120170219

cmake --build .

该命令的含义是:执行当前目录下的构建系统,生成构建目标。

cmake项目构建过程简述:

1. 首先,使用命令行:‘cmake <source tree>’,比如:cmake .. ,在你的构建目录(外部构建方式)下生成了项目文件project files, 官方文档中又叫build tree/binary tree,这其中就包括,比如:Makefile,还有一些其他相关文件/目录/子目录;

2. 其次,自然是对生成好的项目(project files)进行编译构建,使用到的就是你说的'cmake --build .'

3. 最后,--build后面的那个‘.’,指的是生成好的build tree的路径. 一般来说,如果你明确知道,你的系统中使用的是哪种构建器(build generator), 比如:Unix Makefiles, 你完全可以直接使用make进行项目构建.

对于这种--build的形式,多用于自动化脚本之中,或者IDE环境下.

注: <source tree>指的是源文件+顶层CMakeLists所在的路径,cmake ..假设了路径在上一层.

通过cmake ./cmake .. 命令创建Makefile文件后,一般使用make命令编译文件。这里的cmake --build .就与make一样的效果

为什么不直接 make,而是使用 cmake --build 形式的命令,主要是为了跨平台,使用这种形式后,不管你是使用的什么生成器,CMake 都能正确构建,否则如果使用的是 Ninja 或者其他生成器,那 make 就不生效了

示例:

https://github.com/PixarAnimationStudios/OpenSubdiv

Linux

cmake -D NO_PTEX=1 -D NO_DOC=1 \
      -D NO_OMP=1 -D NO_TBB=1 -D NO_CUDA=1 -D NO_OPENCL=1 -D NO_CLEW=1 \
      -D GLFW_LOCATION="*YOUR GLFW INSTALL LOCATION*" \
      ..

cmake --build . --config Release --target install

Useful cmake options and environment variables

-DCMAKE_BUILD_TYPE=[Debug|Release]

-DCMAKE_INSTALL_PREFIX=[base path to install OpenSubdiv]
-DCMAKE_LIBDIR_BASE=[library directory basename (default: lib)]
-DCMAKE_TOOLCHAIN_FILE=[toolchain file for crossplatform builds]

-DCUDA_TOOLKIT_ROOT_DIR=[path to CUDA Toolkit]
-DOSD_CUDA_NVCC_FLAGS=[CUDA options, e.g. --gpu-architecture]

-DPTEX_LOCATION=[path to Ptex]
-DGLFW_LOCATION=[path to GLFW]
-DSTRINGIFY_LOCATION=[path to stringify utility]

-DNO_LIB=1        // disable the opensubdiv libs build (caveat emptor)
-DNO_EXAMPLES=1   // disable examples build
-DNO_TUTORIALS=1  // disable tutorials build
-DNO_REGRESSION=1 // disable regression tests build
-DNO_PTEX=1       // disable PTex support
-DNO_DOC=1        // disable documentation build
-DNO_OMP=1        // disable OpenMP
-DNO_TBB=1        // disable TBB
-DNO_CUDA=1       // disable CUDA
-DNO_OPENCL=1     // disable OpenCL
-DNO_OPENGL=1     // disable OpenGL
-DNO_CLEW=1       // disable CLEW wrapper library
-DNO_METAL=1      // disable Metal

参考:https://cmake.org/cmake/help/latest/variable/CMAKE_INSTALL_PREFIX.html

CMAKE_INSTALL_PREFIX为cmake内置变量,是cmake install函数安装的路径前缀。其默认值/usr/local,也就是我们执行make install时如果没有设置该变量,对于cmake脚本里的install函数,默认会把内容安装到/usr/local下。

如何修改cmake的安装路径呢?

  • 方法一 在执行cmake时指定:

cmake -DCMAKE_INSTALL_PREFIX=<你想要安装的路径>

  • 方法二 设置CMAKE_INSTALL_PREFIX 变量:

SET(CMAKE_INSTALL_PREFIX <install_path>)
要加在 PROJECT(< project_name>) 之后。

在设置完install的安装目录之后,执行install时可以通过DESTINATION直接指定安装目录之下的子目录。

set(CMAKE_INSTALL_PREFIX /usr/local)
install(TARGETS test DESTINATION bin) #将test安装到/usr/local/bin目录下

  • 方法三 cmake --install . --prefix /my/install/prefix

这里有一个小知识点就是,CMAKE_INSTALL_PREFIX会被添加到 CMAKE_SYSTEM_PREFIX_PATH,所以find_package、find_library等命令也会以该目录为prefix去查找。

cmake --build . --config Release --target all -j8

当你运行这个命令时,它会使用 CMake 在 Release 配置下,并使用 8 个并行任务 (-j8) 来构建项目。让我们来逐步解释一下:

  • cmake:这是一个命令行工具,用于构建、测试和打包软件。

  • --build .:这个选项告诉 CMake 在当前目录 (.) 中构建项目。通常你会在 CMake 生成的构建文件目录中运行这个命令。

  • --config Release:这个选项指定了构建配置。在这里,它被设置为 Release,通常意味着项目将以优化的方式构建,没有调试信息。

  • --target all:这个选项指定要构建的目标。在这里,all 是 CMake 中一个常见的目标名称,意味着“构建所有内容”。

  • -j8:这个选项指定了要使用的作业数(并行进程数)来进行构建。这里设置为 8,意味着 CMake 将使用最多 8 个并行进程来进行编译,这可以在多核系统上显著加速构建过程。

所以,当你运行这个命令时,CMake 将以 Release 模式构建项目,构建所有目标,并使用最多 8 个并行进程进行编译。这是一个常见的命令,用于高效地构建具有多个目标的 CMake 项目。

很抱歉您遇到了CMake错误。根据您提供的错误消息,问题似乎出现在FindPackageHandleStandardArgs.cmake文件中的第230行。 这个错误可能由几个原因引起,下面是一些可能的解决方法: 1. 检查依赖项:首先,请确保您已经正确安装了OpenCV所需的所有依赖项。这些依赖项可能包括图形库、图像处理库、数学库等。请检查OpenCV官方文档或README文件以获取完整的依赖项列表,并确保您已经按照要求进行了安装。 2. 清除CMake缓存:有时,CMake缓存中的旧配置可能会导致问题。尝试清除CMake缓存并重新运行CMake来重新配置项目。您可以删除之前创建的build目录,并重新创建一个新的build目录,然后再次运行CMake命令。 3. 检查路径设置:检查CMake配置中涉及到路径的设置是否正确。特别是检查各种依赖项的路径是否正确设置,例如OpenCV的安装路径、相关库文件的路径等。 4. 更新CMake版本:考虑升级到最新版本的CMake。一些CMake错误可能是由于旧版本的CMake不兼容导致的。请访问CMake官方网站,下载并安装最新版本的CMake。 5. 查看详细错误信息:在错误消息的后面可能还有更详细的错误信息,这些信息可以帮助您更好地理解问题所在。请仔细阅读完整的错误消息,以获取更多有关问题的线索。 如果上述解决方法无法解决问题,请尝试在OpenCV的官方论坛或CMake社区中寻求帮助。在这些地方,您可以找到更多关于特定错误的信息,并获得专家支持。 希望这些提示能对您有所帮助!如果您有任何其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值