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

如何在CMake中拥有多个二进制目录?

在CMake中拥有多个二进制目录可以通过以下步骤实现:

  1. 首先,在CMakeLists.txt文件中定义多个二进制目录变量。例如,我们可以定义两个目录变量:BIN_DIR1和BIN_DIR2。
代码语言:cmake
复制

set(BIN_DIR1 ${CMAKE_BINARY_DIR}/bin1)

set(BIN_DIR2 ${CMAKE_BINARY_DIR}/bin2)

代码语言:txt
复制
  1. 接下来,使用add_executable或add_library命令来创建可执行文件或库文件,并将它们输出到相应的二进制目录中。
代码语言:cmake
复制

add_executable(myapp1 main1.cpp)

set_target_properties(myapp1 PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${BIN_DIR1})

add_executable(myapp2 main2.cpp)

set_target_properties(myapp2 PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${BIN_DIR2})

代码语言:txt
复制

在上述示例中,myapp1可执行文件将被输出到BIN_DIR1目录,而myapp2可执行文件将被输出到BIN_DIR2目录。

  1. 最后,使用install命令将二进制文件安装到指定的目录中。这样可以方便地将生成的二进制文件部署到其他机器上。
代码语言:cmake
复制

install(TARGETS myapp1 DESTINATION ${CMAKE_INSTALL_PREFIX}/bin1)

install(TARGETS myapp2 DESTINATION ${CMAKE_INSTALL_PREFIX}/bin2)

代码语言:txt
复制

在上述示例中,myapp1可执行文件将被安装到bin1目录,而myapp2可执行文件将被安装到bin2目录。

通过以上步骤,我们可以在CMake中拥有多个二进制目录,并将不同的可执行文件或库文件输出到相应的目录中。这样可以更好地组织和管理项目中的二进制文件。

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

相关·内容

云课五分钟-03第一个开源游戏复现-贪吃蛇

进入源代码目录,查找是否有编译脚本(Makefile或CMakeLists.txt)。如果有,您可以使用相应的构建工具(make或cmake)进行编译。...执行编译命令后,将生成可执行文件或游戏二进制文件。 运行游戏:当编译完成后,您将得到一个可执行的游戏二进制文件。在终端中导航到游戏二进制文件所在的目录,并运行该文件。...set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) 这里设置了运行时输出目录,即生成的可执行文件将放置在构建目录下的bin文件夹...这里链接了SDL2的多个库(SDL2::Main, SDL2::Net等)以及m库(通常是数学库)。...从你给出的文本,我看到你提供了关于“DungeonRush”游戏的更多详细信息,包括如何在openSUSE和MacOS上安装依赖项,以及如何编译该游戏。

29830

Exa - “Rust”的“ls Command”的现代替代品

它是用Rust编程语言编写的,并附带了传统ls命令不可用的几个附加功能。 重要的是,它的选项与ls命令类似,但并不完全一样,我们将在后面看到。...其特征之一是区分列出的各种文件类型信息(文件所有者,组所有者,权限,块,索引节点信息等)的有用颜色。所有这些信息都使用单独的颜色显示。 Exa特点: 小巧,快捷便携。 默认情况下使用颜色区分信息。...它有Git支持; 允许查看目录的Git状态。 还支持使用树视图递归到目录。...要求: Rustc版本1.17.0以上 libgit2 cmake的 在Linux系统安装Exa 安装exa的最简单方法是下载一个用于Linux发行版的二进制文件,并将其放在/usr/local/bin...现在,您可以在显示如何在Linux中使用exa的部分。

1.5K20

g++,CMake和Makefile了解一下

一条规则可以包含多个target,这意味着其中每个target的prerequisite都是相同的。当其中的一个target被修改后,整个规则的其他target文件都会被重新编译或执行。 2....在本实例我们现在拥有DisplayImage.cpp,所以DisplayImage.cpp是依赖文件,我们想得到DisplayImage.o,所以它是目标文件。代码如下: ?...下面我带大家学习下CMake的基础知识。 3.1 安装CMake 首先我们看看如何在自己的linux系统(我的系统Ubuntu18.04)下安装CMake。...3.2 CMake编译流程 成功安装好CMake后我们再来说说如何在linux平台下使用CMake生成Makefile并编译的流程,如下: 1.编写CMake配置文件CMakeLists.txt,我们可以认为...,这些设定的目录将被编译器用来查找 include 文件 使用范例:include_directories(${PROJECT_SOURCE_DIR}/lib) 像这样的命令还有很多,find_package

1.5K20

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

从技术上讲,directory的所有文件不一定都属于target(并且目标源代码可能位于多个目录)。...这个脚本需要通过-i和-o参数提供的输入和输出目录。 这两个步骤应该在CMAKE_BINARY_DIR工作目录执行,以便如果需要,单元测试二进制可以通过相对路径访问文件。...*第一个选项意味着文档与二进制文件一起提供,可供在线获取,或者(不那么优雅地)与源代码一起提交到仓库。 答案很重要,因为如果我们希望用户在构建过程中生成文档,他们需要在他们的系统拥有这些依赖项。...你可以设置多个过滤器,控制从源目录安装哪些文件/目录。...因为在我们示例CalcConfig.cmake和CalcTargets.cmake安装在同一个目录install(EXPORT)所设置),目标导出文件将被正确包含。

33500

cmake简单使用教程

目录下的所有源文件列表存放到变量HARDWARE_LIST里 # aux_source_directory(..../hardware/server.c) # 将目标二进制可执行文件的存放位置,改为工程的根目录下的bin文件夹下 set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR...}/bin) # 添加多个指定头文件的搜索路径 include_directories(header1 header2) # 添加存放源文件的子目录,或者指定中间二进制和目标二进制的存放位置,src.../hardware/beep.c) # 设置最终生成的库的名称,还有其他设置库的版本号等功能 set_target_properties(test_shared PROPERTIES OUTPUT_NAME.../hardware/beep.c) # 设置最终生成的库的名称,还有其他设置库的版本号等功能 set_target_properties(test_static PROPERTIES OUTPUT_NAME

99740

在 Windows 平台搭建 MQTT 服务

出于稳定性、可靠性、成本等多方面的考虑,众多 MQTT 服务实现更倾向于选择拥有丰富开源生态系统的 Linux 环境,Windows 平台上可选的 MQTT 服务相对有限。...本文将以 NanoMQ 为例,使用二进制包和源代码编译两种方式演示如何在 Windows 平台中快速搭建 MQTT 服务。...二进制包安装首先进入 NanoMQ 官网下载页面,选择 Windows 平台下载安装包: 图片可以在解压后文件夹的bin目录下用 Windows 命令行使用 NanoMQ。...将解压后的C:\xxx\nanomq-0.21.10-windows-x86_64\bin 目录添加到环境变量,则可以在 Windows 命令行或者 PowerShell 中直接使用 NanoMQ。...其中C:\nanomq\config\nanomq.conf 为 NanoMQ 配置文件的地址,配置文件示例可以在解压后文件夹的config 目录下找到。NanoMQ 的详细配置说明请参见官方文档。

3200

CMakecmake的install指令「建议收藏」

,即可执行二进制、动态库、静态库: 目标文件 内容 安装目录变量 默认安装文件夹 ARCHIVE 静态库 ${CMAKE_INSTALL_LIBDIR} lib LIBRARY 动态库 ${CMAKE_INSTALL_LIBDIR...:可执行二进制myrun安装到{CMAKE_INSTALL_BINDIR}目录,动态库libmylib.so安装到{CMAKE_INSTALL_LIBDIR}目录,静态库libmystaticlib.a...该命令将一个或多个目录的内容安装到给定的目的地,目录结构被逐个复制到目标位置。每个目录名称的最后一个组成部分都附加到目标目录,但是可以使用后跟斜杠来避免这种情况,因为它将最后一个组成部分留空。...某些跟随PATTERN或REGEX表达式后的参数,仅应用于满足表达式的文件或目录:EXCLUDE选项将跳过匹配的文件或目录。PERMISSIONS选项将覆盖匹配文件或目录的权限设置。...SCRIPT参数将在安装过程调用给定的CMake脚本文件(即.cmake脚本文件),如果脚本文件名是相对路径,则将相对于当前源目录进行解释。CODE参数将在安装过程调用给定的CMake代码。

7.4K20

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

系统信息预定义变量 CMAKE_MAJOR_VERSION cmake主版本号,2.8.6的2 CMAKE_MINOR_VERSION cmake次版本号,2.8.6的8 CMAKE_PATCH_VERSION...cmake补丁等级,2.8.6的6 CMAKE_SYSTEM 系统名称,例如Linux-2.6.22 CMAKE_SYSTEM_NAME 不包含版本的系统名,Linux CMAKE_SYSTEM_VERSION...系统版本,2.6.22 CMAKE_SYSTEM_PROCESSOR 处理器名称,i686 UNIX 在所有的类UNIX平台为TRUE,包括OS X和cygwin WIN32 在所有的win32平台为...内部构建方法cmake生成的中间文件和可执行文件都会存放在项目目录;外部构建方法,中间文件与可执行文件都存放在build目录。 笔者强烈建议使用外部构建方法。...; [EXECLUDE_FROM_ALL]:将这个目录从编译过程中排除; 这个指令用于向当前工程添加存放源文件的子目录,并可以指定中间二进制和目标二进制存放的位置。

5.4K100

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

如果我们把这些文件都放在一个单一的目录,找到任何东西都将是一场噩梦。因此,我们在项目的主目录创建多个目录,并将相关文件移入其中。...这个解决方案可行,但它有几个缺点: 嵌套目录的变量将污染顶层作用域(反之亦然): 在简单的示例这不是问题,但在更复杂的多级树结构,存在多个变量在过程中使用,它可能很快变得难以调试。...在 src 目录中有多个目录对于大型项目来说非常有用。但如果你只是构建一个可执行文件或库,你可以跳过它们,并将源文件直接存储在 src 。...每次,CMake 进入新的作用域并从相应的列表文件执行命令。 所有目标都被收集并检查其正确性。CMake 现在拥有生成构建系统的所有必要信息。...,并且我们已经知道如何在实践中使用可执行目标——在生成步骤CMake 将创建一个构建系统并为其填充编译每个源文件并将它们链接在一起成一个单一的二进制可执行文件的食谱。

29600

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

在这里,我们生成了一个存储在buildtree目录的构建系统。接着,我们执行了构建阶段,生成了一个我们能够运行的最终二进制文件。...使用 ZIP 包,你将不得不将 CMake 二进制目录添加到PATH环境变量,这样你才能在任何目录中使用它,而不会出现错误: 'cmake' is not recognized as an internal...构建树 CMake 使用此目录来存储构建过程中生成的所有内容:项目的工件、短暂配置、缓存、构建日志以及您的本地构建工具将创建的任何内容。这个目录的别名还包括构建根和二进制树。...此目录的关键收获如下: 您的二进制文件将在此处创建,例如可执行文件和库文件,以及用于最终链接的对象文件和归档文件。 不要将此目录添加到您的 VCS ——它是特定于您的系统的。...总结 现在你已经了解了 CMake 是什么以及它是如何工作的;你学习了 CMake 工具家族的关键组成部分以及如何在各种系统安装它们。

69301

CMake学习笔记合集

—–高级编译配置工具 当多个人用不同的语言或者编译器开发一个项目,最终要输出一个可执行文件或者共享库(dll,so等等)这时候神器就出现了—–CMake!...二进制 将构建后的目标文件放入构建目录的 bin 子目录 将 doc 目录 的内容以及 COPYRIGHT/README 安装到/usr/share/doc/cmake/ 将目标文件放入构建目录的 bin...,并可以指定中间二进制和目标二进制存放的位置 EXCLUDE_FROM_ALL函数是将写的目录从编译中排除,程序的example ADD_SUBDIRECTORY(src bin) 将 src.../configure –prefix=/usr 如何安装HelloWord 使用CMAKE一个新的指令:INSTALL INSTALL的安装可以包括:二进制、动态库、静态库以及文件、目录、脚本等 使用CMAKE...目录名以/结尾:将这个目录的内容安装到目标路径。

2.2K20

CMake学习笔记

—–高级编译配置工具 当多个人用不同的语言或者编译器开发一个项目,最终要输出一个可执行文件或者共享库(dll,so等等)这时候神器就出现了—–CMake!...二进制 将构建后的目标文件放入构建目录的 bin 子目录 将 doc 目录 的内容以及 COPYRIGHT/README 安装到/usr/share/doc/cmake/ 将目标文件放入构建目录的 bin...,并可以指定中间二进制和目标二进制存放的位置 EXCLUDE_FROM_ALL函数是将写的目录从编译中排除,程序的example ADD_SUBDIRECTORY(src bin) 将 src...子目录加入工程并指定编译输出(包含编译中间结果)路径为bin 目录 如果不进行 bin 目录的指定,那么编译结果(包括中间结果)都将存放在build/src 目录 更改二进制的保存路径 SET.../configure –prefix=/usr 如何安装HelloWord 使用CMAKE一个新的指令:INSTALL INSTALL的安装可以包括:二进制、动态库、静态库以及文件、目录、脚本等 使用CMAKE

2.1K20

CmakeList的编写和参数详解

采用自动化的项目构建工具cmake 可以将程序员从复杂的makefile 文件解脱出来。...使用cmake 很简单,只需要执行cmake, make 两个命令即可,用我工作的一个工程举例说明。 假设当前的项目代码在src 目录。...,便已成为库文件存放到子目录lib lib —– 存放utility 生成的库 bin —– 存放association 生成的二进制文件...build —– 编译目录,存放编译生成的中间文件 cmake 要求工程主目录和所有存放源代码子目录下都要编写CMakeLists.txt 文件,注意大小写(cm 大写,list...本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

1.7K50

CMake常用命令的一些整理

*.h) 例如将当前文件夹子目录src文件夹下所有.cpp文件的文件名加入到MAIN_SRC,将当前文件夹子目录src文件夹下所有.h加入到MAIN_HDR。...}") 1.17 安装 install 指令用于定义安装规则,安装的内容包括二进制可执行文件、动态库、静态库以及文件、目录、脚本等。...,上述示例的意思是: 如果目标util是可执行二进制目标,则安装到${CMAKE_INSTALL_PREFIX}/bin目录 如果目标util是静态库,则安装到安装到${CMAKE_INSTALL_PREFIX...操作系统变量 CMAKE_MAJOR_VERSION cmake主版本号,3.4.1的3; CMAKE_MINOR_VERSION cmake次版本号,3.4.1的4; CMAKE_PATCH_VERSION...cmake补丁等级,3.4.1的1; CMAKE_SYSTEM 操作系统名称,包括版本名,Linux-2.6.22; CAMKE_SYSTEM_NAME 操作系统名称,不包括版本名,Linux

1.5K10

【gtest】 C++ 的测试框架之使用 gtest 编写单元测试

在项目目录(my_project),创建一个名为 CMakeLists.txt 的文件: vim CMakeLists.txt 其内容如下: cmake_minimum_required(VERSION...include(FetchContent):包含了 CMake 的 FetchContent 模块,用于从外部资源( GitHub)获取依赖项。...最后两行启用了 CMake 的测试运行器,使用 GoogleTest 的 CMake 模块来发现包含在二进制文件的测试。 现在你可以依据下面指令构建和运行你的测试: 1. cmake -S ....-B build 告诉 CMake 在当前目录(-S .)查找 CMakeLists.txt 文件,并在指定的构建目录 build 中生成构建系统文件(-B build)。 2....ctest 会查找构建目录的测试,并执行它们。 显示如下内容: 恭喜!你成功地构建并运行了一个使用 GoogleTest 的测试二进制文件。

90810

conan入门(五):conan 交叉编译引用第三方库示例

通过完整的二进制包管理,它可以为任意数量的不同版本的包创建和重用任意数量的不同二进制文件(用于不同的配置,架构、编译器版本等),在所有平台上使用完全相同的过程。...@《Conan官方文档》 在上一篇博客《conan入门(四):conan 引用第三方库示例》我们以cJSON为例说明了如何在项目中引用一个conan 包。...本文还是以cJSON 为例 ,说明如何在交叉编译环境下使用Conan引入依赖库。 总得来说,很简单,只需要有工具链文件,就可以完成。...): ​ --build never 禁止编译依赖包,只下载预编译的二进制包,如果没找到预编译包则报错[不可与其他可选值组合] ​ --build missing 如果依赖包没有找到预编译的二进制包则从源码编译...​ --build outdated 如果依赖包没有找到预编译的二进制包或过期(日期旧于源码)则从源码编译 ​ --build cascade ​ --build [pattern] 编译包名匹配

1.5K30
领券