首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

现代CMake,使用target_link_library作为外部二进制库

现代CMake是一种用于构建和管理C++项目的工具。它提供了一种简化和自动化构建过程的方式,并且可以与各种不同的编译器和构建系统集成。

在现代CMake中,使用target_link_libraries命令来链接外部二进制库。这个命令用于将一个或多个外部库链接到目标可执行文件或库中。它的语法如下:

代码语言:txt
复制
target_link_libraries(target_name library_name1 library_name2 ...)

其中,target_name是要链接库的目标名称,library_name1、library_name2等是要链接的库的名称。

使用target_link_libraries命令可以实现以下功能:

  1. 链接静态库:可以将静态库链接到目标文件中,使得目标文件可以使用静态库中的函数和变量。
  2. 链接动态库:可以将动态库链接到目标文件中,使得目标文件可以在运行时动态加载和使用动态库中的函数和变量。
  3. 链接系统库:可以链接系统提供的库,如标准C库、数学库等。
  4. 链接第三方库:可以链接第三方库,如Boost、OpenCV等。

现代CMake的优势包括:

  1. 简化构建过程:现代CMake提供了一种简洁的语法和命令,可以大大简化项目的构建过程,减少了手动配置的工作量。
  2. 跨平台支持:现代CMake可以在多个平台上使用,包括Windows、Linux、macOS等,可以方便地进行跨平台开发和构建。
  3. 高效的依赖管理:使用target_link_libraries命令可以方便地管理项目的依赖关系,包括链接外部库、管理库的版本等。
  4. 可扩展性:现代CMake支持插件机制,可以通过插件扩展其功能,满足不同项目的需求。

现代CMake在各类编程语言和开发过程中都有广泛的应用场景,特别是在C++项目的构建和管理中更为常见。它可以与各种开发工具和框架集成,如IDE、版本控制系统、测试框架等,提供了一种灵活和高效的开发环境。

腾讯云提供了一系列与云计算相关的产品,其中包括云服务器、云数据库、云存储等。这些产品可以帮助用户快速构建和部署各类应用,提供稳定可靠的云计算服务。

关于现代CMake的更多信息和详细介绍,您可以参考腾讯云的文档:

现代CMake - 腾讯云文档

请注意,以上答案仅供参考,具体的应用和推荐产品需要根据实际需求和情况进行选择。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C++ 编译体系入门指北

对C++的编译体系是如何发展的,为什么要用CMake,它的运作原理是如何的比较感兴趣,所以就想系统学习一下,特此整理本篇文章作为入门指引。...包管理器 早期阶段 在C++ 早期阶段,开发者主要依赖于手动管理和依赖项。这通常包括下载源代码或预编译的二进制文件,然后将其集成到项目中。这种方式虽然灵活,但容易出错且难以维护。...虽然它简化了使用,但仍然需要手动安装和管理。 Conan Conan 是一个现代的、跨平台的 C++ 包管理器,旨在解决依赖管理问题。...它通过 CMake外部项目功能来管理依赖项,适合那些已经使用 CMake 作为构建系统的项目。 Buckaroo Buckaroo 是一个基于 Buck 构建系统的 C++ 包管理器。...它适合那些希望最小化外部依赖的项目。

53421
  • CMake学习笔记合集

    内部构建和外部构建 上述例子就是内部构建,他生产的临时文件特别多,不方便清理 外部构建,就会把生成的临时文件放在build目录下,不会对源文件有任何影响强烈使用外部构建方式 外部构建方式举例 //例子目录.../configure –prefix=/usr 如何安装HelloWord 使用CMAKE一个新的指令:INSTALL INSTALL的安装可以包括:二进制、动态、静态以及文件、目录、脚本等 使用CMAKE...安装过程 cmake .. make make install 静态和动态的构建 任务: 1,建立一个静态和动态,提供 HelloFunc 函数供其他程序编程使用,HelloFunc 向终端输出...DESTINATION include/hello) //二进制,静态,动态安装都用TARGETS //ARCHIVE 特指静态,LIBRARY 特指动态,RUNTIME 特指可执行目标二进制...使用外部共享和头文件 准备工作,新建一个目录来使用外部共享和头文件 [root@MiWiFi-R4CM-srv cmake3]# tree . ├── build ├── CMakeLists.txt

    2.2K20

    CMake学习笔记

    外部构建,就会把生成的临时文件放在build目录下,不会对源文件有任何影响强烈使用外部构建方式 外部构建方式举例 //例子目录,CMakeLists.txt和上面例子一致 [root@localhost.../configure –prefix=/usr 如何安装HelloWord 使用CMAKE一个新的指令:INSTALL INSTALL的安装可以包括:二进制、动态、静态以及文件、目录、脚本等 使用CMAKE..... make make install 静态和动态的构建 任务: 1,建立一个静态和动态,提供 HelloFunc 函数供其他程序编程使用,HelloFunc 向终端输出 Hello World...DESTINATION include/hello) //二进制,静态,动态安装都用TARGETS //ARCHIVE 特指静态,LIBRARY 特指动态,RUNTIME 特指可执行目标二进制...使用外部共享和头文件 准备工作,新建一个目录来使用外部共享和头文件 [root@MiWiFi-R4CM-srv cmake3]# tree . ├── build ├── CMakeLists.txt

    2.1K20

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

    开关选项 BUILD_SHARED_LIBS 控制默认的编译方式。 注:如果未进行设置,使用ADD_LIBRARY时又没有指定类型,默认编译生成的都是静态。...内部构建方法中,cmake生成的中间文件和可执行文件都会存放在项目目录中;外部构建方法中,中间文件与可执行文件都存放在build目录中。 笔者强烈建议使用外部构建方法。...我们可以通过SET指令对其进行设置最终的目标二进制的位置,即最终生成的工程可执行文件与最终的共享,而不包含编译生成的中间文件。...该指令用于添加外部的搜索路径。 10....; 指定链接目标文件时需要链接的外部,效果类似于gcc编译参数-L,解决外部依赖的问题。

    5.5K100

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

    进行链接 你可能会认为,在我们成功将源代码编译成二进制文件之后,作为构建工程师我们的工作就完成了。...: 依赖地狱 模块与共享的区别: 模块与共享的区别 第七章:使用 CMake 管理依赖 你的解决方案是大型还是小型,并不重要;随着它的成熟,你最终会决定引入外部依赖。...使用 Git 仓库工作 许多项目依赖于 Git 作为版本控制系统。假设我们的项目和外部都在使用它,有没有某种 Git 魔法能让我们把这些仓库链接在一起?...我们能否构建的特定(或最新)版本,作为构建我们项目的一个步骤?如果是,怎么做? 通过 Git 子模块提供外部 一个可能的解决方案是使用 Git 内置的机制,称为Git 子模块。...当然,如果你能使用现代 C++(是的,C++11 不再被认为是“现代”的),那么推荐使用更新的版本。在与 Catch2 合作时,你应该选择一个 Git 标签并在你的列表文件中固定它。

    54600

    c++大型工程构建演化

    2.2 公共统一管理 在视频实体机开发年代,有一个最原始的母机,里面有所有的视频公共代码和编译好的.a静态文件,母机通过crontab的方式每天凌晨给各个组的开发机通过rsync命令同步公共,达到各个组使用的公共是同一个版本...2.3 业务怎么使用公共 公共统一放到一个目录,定时更新,公共库里面有一个makefile.comm文件,该文件定义好公共对外的宏,程序直接使用这个宏来达到包含指定的目的,通过预定义宏的方式可以向开发者屏蔽公共的升级操作导致目录变更导致编译找不到文件的问题...,遇到相互依赖导致的符号问题以及二进制兼容真的让人很头疼,出现问题及其难定位; 公共升级慢,更新是以天为单位,要想实现即时更新还得人为操作; 母机这种单一实体机的管理方式,存在硬件故障的风险。...公共也伴随着框架的改造输出cmake的引用变量。...,需要引用外部的时候还是一样需要先把外部拷贝到视频自己的公共

    1.5K30

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

    然而,找到所有属于目标(以及可能的依赖目标)的源文件和头文件是一个非常复杂的过程,尤其是当我们需要过滤掉属于外部且不应该格式化的头文件时。在这种情况下,按目录工作更加可行。...这个命令对于小到中等大小的代码来说效果很好。对于大量文件,我们需要将绝对文件路径转换为相对路径,并使用directory作为工作目录执行格式化(list(TRANSFORM)命令在这里很有用)。...它是用 Python 编写的,这可能会成为某些项目不愿依赖的。提供的修复格式可以被 Emacs、Eclipse、VS7、Junit 以及作为sed命令的格式所消费。...在发布该选项之前,我们可以使用此机制与PRIVATE_HEADER和RESOURCE工件类型。但我们如何指定更复杂的安装目录结构呢? 低级安装 现代 CMake 正在逐步放弃直接操作文件的概念。...安装目录处理了很多不同的用例,但对于真正高级的安装场景(如安装后配置),我们可能需要使用外部工具。我们应该如何做到这一点?

    59200

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

    find_modules 以及一次性脚本 src:将存储我们的二进制文件和的源代码 doc:用于构建文档 extern:我们从中源代码构建的外部项目的配置 test:包含自动化测试的代码...只有当我们从项目中外部使用时,这个目录才应该存在。它提供了其他项目在编译时将消耗的公共头文件。我们将在第五章*,使用 CMake 编译 C++源代码中回到这个主题,构建我们自己的。...后来,这些文件将被链接器用来构建单一的二进制文件。现代编译器可以在链接后进行优化(这称为链接时优化),以便所有编译单元可以作为一个单一模块进行优化。...导入的目标 如果你浏览了目录,你知道我们将讨论 CMake 如何管理外部依赖项——其他项目、等等。IMPORTED目标本质上就是这一过程的产物。...这样做有两种方式——使用其输出工件作为可执行文件(或)的源,或者明确将其添加到自定义目标的一个DEPENDS列表中。 将自定义命令作为生成器使用 诚然,不是每个项目都需要从其他文件生成 C++代码。

    56300

    从零开始编写一个cmake构建脚本

    ,可执行二进制文件存放的路径set(TARGET_INSTALL_LIBDIR lib) # 定义变量存放三方安装时,库存放的路径引用其他三方引用其他三方的方式有2种引用其他三方的源码源码有cmake...) # TARGET_NAME 本生成的名, 通过 add_library 添加 引入三方源码以及本源码等生成目标TARGET_NAME引用其他三方二进制文件(.so)通过target_link_libraries...引用当前源码路径下的xxx使用find_package方法来引用,此方法的使用限制参照IDE上find_package使用分析,使用方法: find_package(XXX REQUIRED)...()文件安装支持install,对外提供被find_package的能力install后,所有导出的头文件、动态、静态、可执行二进制cmake文件都可以安装到指定路径下install(TARGETS...}/lib/lib@TARGET_NAME@.a) #配置,对外导出变量@PROJECT_NAME@_LIBRARIES供外部引用set(@PROJECT_NAME@SHARED_LIBRARIES

    12520

    CMake基础教程

    ${}表达式允许访问环境中定义的任何变量,因此,我们可以使用${PROJECT_NAME}变量作为一个可执行程序的输出名。...创建文件(Creating a library)   CMake允许你创建文件,可以被OpenCV编译系统使用。软件开发过程中,在多个应用之间共享代码是一种通用并且实用的实践。...在这种情况下,我们不需要创建一个二进制可执行文件;取而代之,我们创建一个编译好的文件,其中包含了所有的函数、类等等,使用它来开发。我们可以将这个文件与其它应用共享,而不需要共享我们的源代码。...执行这一行命令将会产生一个共享文件(在OS X或者Unix下生成一个*.so文件,在Windows下生成*.dll文件),这取决于我们所使用的操作系统,或者是要创建动态还是静态。   ...管理依赖(Managing dependencies)   CMake具有搜索我们的依赖文件以及外部的能力,它为我们提供了编译复杂工程的基础设施, 4.

    63100

    cmake快速入门「建议收藏」

    为了使用外部编译方式编译项目,需要先在目录hello下新建一个目录build(也可以是其他任何目录名)。...这就是所谓的外部编译方式。 五、处理多源文件目录的方法 CMake处理源代码分布在不同目录中的情况也十分简单。现假设我们的源代码分布情况如下: 其中 src 目录下的文件要编译成一个链接。...当这个变量值为 Debug 的时候,CMake使用变量 CMAKE_CXX_FLAGS_DEBUG 和 CMAKE_C_FLAGS_DEBUG 中的字符串作为编译选项生成 Makefile ,当这个变量值为..."$ENV{CXXFLAGS} -O0 -Wall -g -ggdb") 这个结果说明生成的 Makefile 中使用了变量 CMAKE_CXX_FLAGS_DEBUG 作为编译时的参数。..."$ENV{CXXFLAGS} -O3 -Wall") 这两个结果说明生成的 Makefile 中使用了变量 CMAKE_CXX_FLAGS_RELEASE 作为编译时的参数。

    1.2K60

    CMake 秘籍(五)

    一旦添加了外部项目,此命令允许将附加命令作为自定义步骤附加到该项目上。...如前一示例所示,各个子项目并非必须由 CMake 管理。与前一示例相反,本示例中的外部子项目将是一个 CMake 项目,并将展示如何使用超级构建下载、构建和安装 FFTW 。...这样的文件将作为目标导出,供第三方项目使用。目标包含版本、配置和的位置,即有关目标如何配置和构建的完整信息。...使用INTERFACE属性,将仅被链接到以当前目标作为依赖的目标。 使用PUBLIC属性,将被链接到当前目标以及任何以它作为依赖的其他目标。...在前三个菜谱中,我们讨论了 Cython、Boost.Python 和 pybind11 作为连接 Python 和 C++的工具,提供了一种现代且清晰的方法。在前面的菜谱中,主要接口是 C++接口。

    70420

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

    随着您的进展,您将学习如何编译和链接可执行文件和,这些过程是如何详细工作的,以及如何优化所有步骤以获得最佳结果。您还将了解如何将外部依赖项添加到项目中:第三方、测试框架、程序分析工具和文档生成器。...第七章,使用 CMake 管理依赖项,解释了现代 CMake 中可用的依赖管理方法。...我强烈建议至少使用版本 3.15,这个版本被认为是“现代 CMake”。如果您需要更多信息,您可以在cmake.org/cmake/help/找到最新的完整文档。...此目录的关键收获如下: 您的二进制文件将在此处创建,例如可执行文件和文件,以及用于最终链接的对象文件和归档文件。 不要将此目录添加到您的 VCS 中——它是特定于您的系统的。...同时,这里有一些有趣的细节要注意: 配置文件(原名)包含有关如何使用二进制文件、头文件和辅助工具的信息。有时,它们暴露出 CMake 宏,可以在您的项目中使用

    1.2K01

    CMake 秘籍(六)

    我们希望确保默认情况下,我们共享中定义的所有符号对外都是隐藏的。这将迫使项目贡献者明确界定外部代码之间的接口,因为他们必须明确标记那些也打算在项目外部使用的符号。...当其他项目想要将一个作为依赖项使用时,可以充分体会到这种机制的强大之处。如果维护者提供了适当的 CMake 配置文件,那么所有依赖项都可以很容易地用很少的 CMake 命令来解决。...我们将把它作为外部项目添加,从其在线 Git 存储下载并编译它。...它还将我们自己的项目作为外部项目包含在内。...然而,在实践中,软件包通常使用包管理器(如 Apt、DNF、Pacman、pip 和 Conda)进行安装。我们需要能够以各种格式分发我们的代码项目:作为源代码存档或作为二进制安装程序。

    36700

    披着CLion的外衣实则在讲CMake

    project 命令:规定了本项目的项目名称,同时也根据这个传入的值生成了一堆变量,常用的如下: PROJECT_NAME :项目名称 PROJECT_BINARY_DIR :项目的二进制文件目录,即编译后的可执行文件和文件的输出目录...对于新手而言,其实不太需要自己手写 cmake,因为 CLion 会在你新建源文件的时候把相应源文件添加到 add_excutable 命令的后面,但项目稍微大一点或者说引入了很多外部,那么大概率会抛弃...PROJECT_NAME :项目名称 PROJECT_BINARY_DIR :项目的二进制文件目录,即编译后的可执行文件和文件的输出目录 PROJECT_SOURCE_DIR :项目的源文件目录,即包含...CMakeLists.txt 文件的目录 CMAKE_BINARY_DIR :当前 CMake 运行的二进制文件目录,通常和 PROJECT_BINARY_DIR 是同一个目录 CMAKE_SOURCE_DIR...第一个参数很重要,被称为 target,可以作为 target_xxx 命令的接收对象。 add_library:用于添加文件,可以创建静态或动态

    4.9K30
    领券