首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    CMake使用教程和原理

    这个阶段解决了用户构建一个项目需要依赖的各种输入参数。 在项目的构建过程中都使用shell级别的环境变量。通常,项目具有指向根目录位置的PROJECT_ROOT环境变量。还有配置可选或外部程序包。...要使构建正常进行,每次执行构建时都需要设置所有这些外部变量。所有CMakeFile在配置阶段解决了这个问题。...3.7.8、工程包名字 PROJECT(output_binary_name CXX) 四、高级特性 - 在线下载编译工程 ExternalProject在构建时从另一个项目填充内容。...这意味着在构建主项目之前,本地没有其他项目的库。首先需要add_dependencies()声明,ExternalProject才会下载,配置或构建。...最主要外部下载引用是 ExternalProject_Add,功能很强大,支持不同的地址去获取依赖,可以是打包文件的 URL,比如 github 上的某个项目的 tag,或者像 boost 这种,在官网提供的下载链接

    13.7K297

    离线安装PySCF-1.7.6

    由于PySCF程序更新较为频繁,不少小伙伴反映按照本公众号之前发过的离线安装教程《离线安装PySCF程序(1.5及更高版本)》经常会出现编译无法通过等问题,因此再次更新一下安装教程。...读者在开始编译前需确认自己机子上有gcc和g++编译器,有MKL数学库,以及cmake软件。...运行如下命令可查看自己机子上是否存在 which gcc which g++ which cmake cmake --version (查看版本号) echo $MKLROOT 笔者撰文时用的gcc版本为...有GIT_TAG标签的表示需要到Tag界面点击下载对应的版本。具体做法是先点击Releases,然后点击Tags ? ? 就能找到相应的版本了。...例如,笔者按照这些网址下载下来的压缩包分别是 libcint-4.0.7.tar.gz libxc-4.3.4.tar.gz xcfun-cmake-3.5.tar.gz 其实这三个库的安装步骤在CMakeLists.txt

    1.6K30

    面向 C++ 的现代 CMake 教程(三)

    共享库在类 Unix 系统上有.so扩展名,在 Windows 上有.dll。 当构建库(静态、共享或共享模块)时,你经常会遇到这个名字链接来表示这个过程。...搜索将从存储在CMAKE_MODULE_PATH变量中的路径开始(默认情况下这个变量是空的)。当项目想要添加和使用外部查找模块时,这个变量可以被项目配置。...在实际中使用 ExternalProject 依赖项在构建阶段被填充非常重要,它有两个效果——项目的命名空间完全分离,任何外部项目定义的目标在主项目中不可见。...更糟糕的是,CMake 实际上理解外部 CMake 项目创建的目标(因为它在构建它们)。在主项目中重复这些声明不会是一个非常 DRY 的做法。...正如其名,自动化测试应该在每次有人做出改动时无需提示地执行。这通常作为构建过程的一部分发生,并且经常作为控制代码质量的一个步骤,在将其合并到仓库之前执行。 你可能会有避免自动化测试以节省时间的冲动。

    67200

    Xmake 和 CC++ 包管理

    Xmake 是一个基于 Lua 的轻量级跨平台构建工具,关于 Xmake 与构建系统的介绍,我们已经在之前的文章中做了详细的介绍:C/C++ 构建系统,我用 xmake。...Xmake 中集成第三方构建系统 在 Xmake 中集成 Cmake 项目 Xmake 并不打算分裂 C/C++ 生态,它能很好和兼容复用现有 cmake/autoconf/meson 维护的项目,比如可以将一些其他使用...完整例子见:Library with CMakeLists 在 Xmake 中集成 Meson 项目 Xmake 支持集成更多其他构建系统维护的第三方源码库,比如 Meson,仅仅只需要导入使用 package.tools.meson...在 Xmake 中集成 Gn 项目 我们也可以使用 package.tools.gn 来本地集成带有 GN 维护的第三方代码库。...中集成 CMake 项目,我们也可以在 CMake 中直接集成 Xmake/Xrepo 提供的包,只需要使用 xrepo-cmake 提供的 CMake Wrapper。

    3K10

    面向 C++ 的现代 CMake 教程(五)

    第3章,设置你的第一个 CMake 项目: 第三章讨论的主题将对项目产生重大影响: 指定最小的 CMake 版本决定了哪些 CMake 政策将适用;命名、版本化和配置项目的语言影响了构建的基本行为。...第七章,使用 CMake 管理依赖关系: 为了使项目更有趣,我们将引入一个外部依赖项:一个文本 UI 库。我们在这一章描述了几种依赖管理方法。...此目标还将链接到外部依赖项:函数式终端(X)用户界面(FTXUI)库,由 Arthur Sonzogni 编写(在进一步阅读部分有一个到 GitHub 项目的链接)。...》,我们可以使用 CMake 捕获一些构建时的值,并通过模板文件将它们提供给 C++代码——例如,使用一个方便的 C++结构体: chapter-12/01-full-project/cmake/buildinfo.h.in...同样,标签用于呈现在构建时通过连续三次调用text()收集的BuildInfo::值。

    18700

    披着CLion的外衣实则在讲CMake

    现在 cmake 在 CLion 中的配置项已经讲完了,简单实践一下来体验之前讲的 CLion 到整个运行的流程: 通过 cmake 配置选项运行整个项目的 CMakeList.txt。...对于新手而言,其实不太需要自己手写 cmake,因为 CLion 会在你新建源文件的时候把相应源文件添加到 add_excutable 命令的后面,但项目稍微大一点或者说引入了很多外部库,那么大概率会抛弃...指定 C++ 语言的标准版本 CMAKE_CXX_FLAGS :指定编译 C++ 代码时使用的编译选项 CMAKE_C_FLAGS :指定编译 C 代码时使用的编译选项 CMAKE_EXE_LINKER_FLAGS...项目中产生的库文件是可以直接通过名称链接的,无论链接对象是在子目录还是父目录 target_link_libraries:用于将可执行文件或库文件链接到库文件或可执行文件。...execute_process:用于执行外部的命令,如下的示例代码是执行 git clone 命令,执行命令的工作目录在 ${CMAKE_BINARY_DIR}/deps/: execute_process

    5.2K30

    CMake 秘籍(三)

    而ExternalProject_Add()在构建时下载(如第八章,超级构建模式所示),FetchContent模块使内容立即可用,以便主项目和获取的外部项目(在本例中为 Google Test)可以在...项目构建目标可能依赖于只能在构建时执行的命令的结果,即在构建系统生成完成后。...在构建CMakeLists.txt文件时,我们简要注释了 tarball 在deps下被提取,即项目构建目录的下一级子目录。这是因为,在 CMake 中,构建树的结构模仿了源树的层次结构。...如何操作 在编写CMakeLists.txt文件时,我们将重用我们在第三章,检测外部库和程序,第 6 个配方,检测 MPI 并行环境中遇到的构建块: 我们声明一个 C++11 项目: cmake_minimum_required...因此,生成器表达式在交叉编译时特别有用,其中一些信息只有在解析CMakeLists.txt后才可用,或者在多配置项目中,构建系统为项目的所有不同配置(如Debug和Release)一次性生成。

    60320

    面向 C++ 的现代 CMake 教程(四)

    当人们提到 Valgrind 时,他们经常会指的是 Valgrind 的 Memcheck。让我们找出如何使用它与 CMake 一起工作——这将为您需要它们时采用其他工具铺平道路。...文档使我们能够分享否则可能丢失的信息,绘制更广阔的图景,提供上下文,揭示意图,最终——教育外部用户和维护者。 你还记得上次加入新项目时,在目录和文件迷宫中迷失了几个小时吗?这种情况是可以避免的。...后者是可选的,因为它需要一个外部的 Graphviz 工具(graphviz.org/)。 开发者首先应该回答以下问题:*项目的用户只是获得文档,还是他们自己生成文档(也许是在从源代码构建时)?...在系统上安装项目 在第章 1 CMake 初学者中,我们提到 CMake 提供了一个命令行模式,可以在系统上安装构建好的项目: cmake --install [] CMake 语法才能工作(不过,在初始构建期间不会进行检查;任何失败都会在安装时显现)。

    68200

    面向 C++ 的现代 CMake 教程(一)

    您还将了解如何将外部依赖项添加到项目中:第三方库、测试框架、程序分析工具和文档生成器。最后,您将探索如何为内部和外部目的导出、安装和打包您的解决方案。...当strategy字段配置为set时,将设置字段值,如果生成器不支持此字段,则会产生错误。配置为external意味着字段值是为外部 IDE 设置的,CMake 应该忽略它。...在 Git 中忽略文件 有很多版本控制系统;其中最流行的一种是 Git。每当我们开始一个新项目时,确保我们只将需要存在于仓库中的文件提交到仓库中是很重要的。...如果我们只是将生成的、用户或临时文件添加到.gitignore文件中,项目卫生更容易维护。这样,Git 就知道在构建新提交时自动跳过它们。...当你第一次阅读 CMake 列表文件时,你可能会觉得其中的语言如此简单,以至于不需要任何特殊培训或准备。接下来的内容经常是尝试引入变化和实验代码的实际尝试,而没有彻底理解它是如何工作的。

    1.3K01

    C++ 编译体系入门指北

    前言 自从入坑C++之后,项目中的编译构建就经常跟CMake打交道,但对它缺乏系统的了解,遇到问题又陷入盲人摸象。...它通过生成本地构建系统(如Makefiles、Visual Studio 项目文件等)来实现跨平台构建。 包管理器 早期阶段 在C++ 早期阶段,开发者主要依赖于手动管理库和依赖项。...Autotools 和 CMake 随着项目规模的扩大和复杂性的增加,构建系统如 Autotools 和 CMake 开始流行。这些工具帮助开发者自动化构建过程,但它们并不是包管理器。...它通过 CMake 的外部项目功能来管理依赖项,适合那些已经使用 CMake 作为构建系统的项目。 Buckaroo Buckaroo 是一个基于 Buck 构建系统的 C++ 包管理器。...它适合那些希望最小化外部依赖的项目。

    57021

    CMake简介及使用实例

    语言项目的编译器。...如果使用 CMake生成 Makefile时,我们需要做一些不同的工作。CMake中存在一个变量CMAKE_BUILD_TYPE用于指定构建类型,此变量只用于基于 make的生成器。...5.CMake使用实例 一般我们的项目结构都是多源文件,多目录。面对此种项目结构,我们需要在每一个源码目录中都会放置一个 CMakeLists.txt文件。...5.1外部构建(out of sourcebuilds) 我们在 CMakeLists.txt所在目录下执行 CMake .会生成大量的文件,这些文件和我们的源文件混在一起不好管理,我们采用外部构建的方式来解决这个问题...以上面的 HelloWorld工程来做解释: 在 HelloWorld目录下建立一个 Build目录(Build目录可以建立在任何地方) 进入 Build目录并进行外部构建 CMake ..

    2.6K21

    CMake学习笔记(二)——CMake语法

    此处对内部编译与外部编译做出介绍: (1) 外部构建与内部构建 假设此时已经完成了CMakeLists.txt的编写,在CMakeLists.txt所在目录下,有两种执行cmake的方法: cmake...内部构建方法中,cmake生成的中间文件和可执行文件都会存放在项目目录中;外部构建方法中,中间文件与可执行文件都存放在build目录中。 笔者强烈建议使用外部构建方法。...优点显而易见:最大限度的保持了代码目录的整洁,生成、编译与安装是不同于项目目录的其他目录中,在外部构建方法下,PROJECT_SOURCE_DIR指向目录与内部构建相同,为CMakeLists.txt所在根目录...CMAKE_INSTALL_PREFIX的值定义为/usr/local,如此在外部构建情况下执行make install命令时,make会将生成的可执行文件拷贝到/usr/local/bin目录下。...(5) COMPILE_FLAGS 设置附加的编译器标志,在构建目标内的源文件时被用到。 (6) LINKER_LANGUAGE 改变链接可执行文件或共享库的工具。

    5.7K100

    深入剖析运行时库配置错误:从静态库到动态库的常见陷阱

    在实际项目开发中,开发者经常需要在静态库与动态库之间做出选择。...静态库与动态库构建的差异在静态库项目中,由于所有代码(包括依赖库)通常在同一编译选项下构建,因此即便部分模块使用了 /MT,而主项目使用 /MD,可能不会立刻暴露出链接错误。...例如,在构建 gRPC 或 Abseil 等第三方库时,如果生成的目标文件使用了 /MT,而最终的 DLL 项目要求 /MD,就会出现下列错误:运行时库不匹配错误 检测到“RuntimeLibrary...例如,安装 gRPC 时应使用如下命令:vcpkg install grpc:x64-windows6.3 清理并重新编译在更改配置后,建议清理之前的构建缓存和中间文件,然后重新编译整个项目,确保所有模块均按照新配置进行构建...必要时,重新生成代码并确认编译选项一致。7. 总结与建议在 Windows 平台下构建项目时,运行时库配置的一致性至关重要。

    11610
    领券