如何将 CMake 文件 (GLOB SRCS *.) 与构建目录一起使用

2024-01-08

这是我当前的 CMakeLists.txt 文件

cmake_minimum_required(VERSION 3.3)
set(CMAKE_C_FLAGS " -Wall -g ")
project( bmi )
file( GLOB SRCS *.cpp *.h )
add_executable( bmi ${SRCS}) 

这是从我的源目录构建的,但之后我必须清理所有额外的文件。我的问题是,如果我的所有源文件都位于同一源目录中,如何从构建目录构建它?

thanks


如果您确实需要使用文件(GLOB …),则此 CMakeLists.txt 应该可以工作:

cmake_minimum_required(VERSION 3.3)
project(bmi)
add_definitions("-Wall" "-g")
include_directories(${PROJECT_SOURCE_DIR})
file(GLOB SRC_FILES ${PROJECT_SOURCE_DIR}/*.cpp)
add_executable(bmi ${SRC_FILES})

在这种情况下,每次添加或删除源文件时,您都必须从构建目录启动 cmake:

cmake <your_source_dir> -G <your_build_generator>

正如 Phil 提醒的那样,CMake 文档不建议使用 GLOB。但也有一些例外。您将获得更多这方面的信息post https://stackoverflow.com/questions/1027247/best-way-to-specify-sourcefiles-in-cmake.

如果您不满足这些例外情况,您宁愿列出源文件而不是使用 GLOB :

set(SRC_FILES ${PROJECT_SOURCE_DIR}/main.cpp
              ${PROJECT_SOURCE_DIR}/bmi.cpp
              … )

注意:如果您在 .cpp 文件中 #include .h 文件,我认为没有任何理由将它们放入 add_executable 中,您只需要使用 include_directories 指定包含目录。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 CMake 文件 (GLOB SRCS *.) 与构建目录一起使用 的相关文章

  • ubuntu:升级软件(cmake)-版本消歧(本地编译)[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我的机器上安装了 cmake 2 8 0 来自 ubuntu 软件包 二进制文件放置在 usr bin cmake 中 我需要将 cmake 版本至少
  • 如果 CMAKE_RUNTIME_OUTPUT_DIRECTORY 更改,CMake 无法找到测试

    我正在使用 CMake 构建我的项目 并且尝试为每个模块创建一堆测试套件 显然如果我修改变量CMAKE RUNTIME OUTPUT DIRECTORY那么 ctest 找不到要运行的测试并失败 我做了一个最小的例子来展示我正在谈论的内容
  • 在cmake中设置PKG_CONFIG_PATH

    我已经在本地构建了 opencv 并将其安装到本地目录 不是系统默认目录 opencv pc存在于该本地文件夹中的 pkgconfig 文件夹下 我怎样才能找到这个opencv pc来自 cmake 因为我想从我的程序链接并包含 openc
  • 如何使我的单元测试适应 cmake 和 ctest?

    到目前为止 我已经使用了一个临时的单元测试程序 基本上是由批处理文件自动运行的全部单元测试程序 尽管其中很多都明确地检查了他们的结果 但还有更多的作弊行为 他们将结果转储到版本控制的文本文件中 测试结果中的任何更改都会被颠覆标记 我可以轻松
  • 在 C 中使用 pow 时,CMake 可以检测是否需要链接到 libm 吗?

    对于某些编译器 using powC 程序中的某些其他函数需要链接到m library https stackoverflow com q 8671366 1959975 但是 某些编译器不需要这样做 并且在链接到m图书馆 C 也存在几乎相
  • Cmake 错误:无效的转义序列 \U

    使用 CMake 在 VC 10 中运行 OpenCL 代码时 出现以下错误 CMake Error at CMakeLists txt 6 set Syntax error in cmake code at C Users Shreedh
  • 如何在使用 Cmake 构建期间编译 HLSL 着色器?

    我正在开发 d3d 应用程序 我想在使用 cmake 构建期间编译我的 hlsl 着色器 我不知道从哪里开始 这是我当前的 CMakeLists txt cmake minimum required VERSION 3 20 project
  • CMake“无法运行 MSBUILD.exe”命令错误

    当我想为 opencv 3 3 0 创建 Visual Studio 15 2017 make 文件时 它给了我以下错误消息 error in configuration process project files maybe invali
  • Clang 与 CLion:无法获取编译器信息

    我尝试通过更改在 CLion 中从 gcc 切换到 clang工具链偏爱 但现在 cmake 失败并显示以下内容 Cannot get compiler information Compiler exited with error code
  • Cygwin 下使用 CMake 编译库

    我一直在尝试使用 CMake 来编译 TinyXML 作为一种迷你项目 尝试学习 CMake 作为补充 我试图将其编译成动态库并自行安装 以便它可以工作 到目前为止 我已经设法编译和安装它 但它编译成 dll 和 dll a 让它工作的唯一
  • 如何在 CMake Makefile 中包含 OpenCV 库

    我希望你可以帮助我 我有一个简单的 CMakeLists txt 以便在 Leopard 10 5 8 上构建我的项目 我正在使用 CMake 2 8 1 目前这是代码 cmake minimum required VERSION 2 8
  • CMake(Ninja 后端)使用 /MT 编译

    我有一个类似的问题CMake 使用 MT 而不是 MD 进行编译 https stackoverflow com questions 14172856 cmake compile with mt instead of md但有一些差异 我正
  • 如何使用自定义 CMake 版本执行 Visual studio 2019 Ninja 构建?

    我正在尝试从 IDE 在 Visual Studio 2019 上使用 Ninja 构建一个项目 我想使用与 VS 2019 发行版中集成的版本不同的 CMake 版本 我已经设置了cmakeExecutable我的变量CMakeSetti
  • 使用cmake交叉编译gRPC

    我正在尝试使用 cmake 交叉编译 gRPC 我实际上做到了 不幸的是 我的方法涉及在 CMakeLists txt 内部进行修改 问题是 当我尝试编译 gRPC 时 它使用的是他刚刚编译的 protobuffer 它无法在 x86 计算
  • CMAKE - 运行时库隐藏文件

    我正在运行 Linux Redhat 我安装了 Anaconda 并且我正在尝试使用安装程序 libspimage CMAKEamd 我收到以下警告 错误 src CMakeLists txt 74 ADD LIBRARY 处的 CMake
  • CMake:如何更改单个目标的编译器

    我有使用交叉编译器的嵌入式项目 我想介绍一下Google测试 用原生GCC编译器编译 另外使用 CTC 编译器构建一些单元测试目标 Briefly 我有 3 个不同的目标并用 3 个不同的编译器编译它们 如何表达它CMakeLists tx
  • 使用 CMake 编译时更改头文件位置会导致缺少 vtable 错误

    对于一个大型 C 项目 我需要从 qmake 过渡到 CMake 但是在处理一个玩具示例时 我遇到了一些我不理解的行为 示例代码具有单个头文件 当该头文件移动到子目录中时 我收到 MainWindow 类缺少 vtable 的错误 CMak
  • CMake source_group() 无法在分层项目设置中正常工作

    在进行更改以使 CMake 项目具有分层文件夹管理后 source group 似乎不再正常工作 CMake 只是将所有内容转储到默认过滤器中 我尝试了各种正则表达式来从父级获取每个源文件的相对文件路径 甚至对父级 CMakeLists t
  • CMake第三方库安装

    我是编程新手 对于我的研究项目 我需要安装一个第三方库以便与 CMake 一起使用 GitHub项目 https github com cpp io2d P0267 RefImpl blob master BUILDING md 我在我的电
  • CMake:Fortran 模块和编译顺序

    我有一个大型 Fortran 程序 其中包含许多目录 每个目录都在伪库中单独编译 但仍然存在相互依赖的混乱 因此最终所有伪库都组合在一个可用的库中 我想使用 Fortran 模块 但它非常脆弱 因为我不能依赖自动依赖项检查 并且根据顺序编译

随机推荐

  • Java 将字符串数组映射为整数数组

    我在 SO 上找到了这段代码 用于将字符串映射到整数 Arrays stream myarray mapToInt Integer parseInt toArray 但如何让它映射到 Integer 类型而不是原始 int 呢 我尝试从In
  • 在 Android 中保存长文本的最佳实践

    我想知道将字符串值存储在strings xml文件 即使字符串非常大 更具体地说 我有一个游戏 我在其中显示游戏规则 所有字符的总和大于 700 个字符 目前 我将这些长字符串分解为较小的字符串 分成段落 所以我想知道 拥有那些包含超过 7
  • Phonegap/Cordova 地理定位在 Android 上不起作用

    我在两个模拟器中的 Android 上运行地理定位时遇到了麻烦 即使我geo fix通过 telnet 和设备上 适用于 iOS WP8 和浏览器 当我使用以下代码向设备询问位置时 我总是收到错误 在我的情况下是自定义的 Retrievin
  • 如何捕获 ExoPlayer 的所有错误?

    我实现了 ExoPlayer 作为我的应用程序的播放器 但我不知道如何捕获所有 ExoPlayer 错误以避免应用程序崩溃 我添加了以下侦听器 但它没有捕获所有错误 我必须使用 DRM 它有时会因某些问题而崩溃 但我之前无法设置侦听器 因为
  • C# - 删除仅提供 Control 为 ToolTip 的 ToolTip

    是的 这个问题已经被问过here https stackoverflow com questions 1165540 how do i remove a tooltip currently bound to a control at SO
  • Smack 4.1 回复超时内无响应

    我在我的 Android 应用程序中使用以下代码 Thread d new Thread new Runnable Override public void run SmackConfiguration setDefaultPacketRe
  • Mongoid - 通过引用文档查询

    我有一个名为 Ad 的模型 如下所示 class Ad include Mongoid Document referenced in category end 和类别模型 class Category include Mongoid Doc
  • Sklearn Transformers:如何将编码器应用于多个列并在生产中重用它?

    我在训练期间使用标签编码器 并希望通过保存并稍后加载来在生产中使用相同的编码器 无论我在网上找到什么解决方案 都只允许标签编码器一次应用于单个列 如下所示 for col in col list df col df col apply La
  • 我应该使用 Path.GetRandomFileName 还是使用 Guid?

    我需要生成唯一的文件夹名称 我应该使用路径 GetRandomFileName http msdn microsoft com en us library system io path getrandomfilename 28v vs 11
  • 当我们使用 antd 表中的 rowSelection 选择父行时选择子行

    我正在尝试使用 antd 表进行 rowselection Reactjs 我正在尝试这个ant components table demo expand children https ant design components table
  • 在R中添加一列两个坐标的距离

    我有一个这样的数据框 id value lat1 lng 1 lat2 lng2 dist 124 50 4 13 2423 46 2342 13 2423 46 2342 537 34 2 13 2434 46 2331 13 2423
  • 如何组合两个不同的 monad

    我正在测试 REST 服务器 我在 IO monad 中击中它并在中模拟它State Db where Db跟踪服务器的假定状态 以下函数应该运行两个版本并比较结果 check Eq a MonadState d s gt s a gt I
  • “折叠”LINQ 扩展方法在哪里?

    我发现在MSDN 的 Linq 示例 http msdn microsoft com en us vcsharp aa336747 aspx foldSimple我想使用一个名为 Fold 的简洁方法 他们的例子 double double
  • Pandas Wide_to_long 的行为与 Python 2.7 中的先前版本有很大不同

    我升级了笔记本电脑并安装了 Python 2 7 和 Pandas 0 23 由于 Wide to long 的结果不同 我以前工作的所有脚本都不再运行 数据框如下所示 Index ID Text column abc A abc B ab
  • Python——如何查看不适合屏幕的输出?

    我应该说我正在寻找问题的解决方案查看不适合您屏幕的输出 例如 range 100 将显示高度为 30 的终端中的最后 30 行 我只是希望被推向正确的方向 并且很好奇你们是如何解决这个问题的 当您遇到希望可以方便地滚动浏览一些大输出的情况时
  • 更改 teechart 中的单点颜色

    我在java中使用teechart 我想改变一系列点的颜色 而不是所有点 如果点的值超过特定值 则将点变成红色 我只知道如何更改所有点的颜色 这是我的代码 xline getPointer setVisible true 数据点突出显示 x
  • 与 mdf 文件的多个连接

    我正在为一个大学项目创建一个使用 C 的 Net 应用程序 并且需要一些帮助 我在网络驱动器上托管了一个 mdf 文件 并且需要多个客户端才能从其应用程序访问此数据库 每个客户端计算机都将运行自己的 sql express 实例 我可以从我
  • 实体框架包括扩展返回大量数据

    我有两个实体 User 和 UserPermission User 实体包含所有常规字段 Id Username Email 等 UserPermission 实体有两个值 UserId 和 PermissionId 我编写了一个存储库方法
  • 在 PHP 中,检查 30 分钟是否已过的示例?

    我有一个验证功能 用户将在 30 分钟后自动注销 我想在身份验证功能中存储登录时间 时间戳 然后 每次调用需要身份验证的函数时 我都会更新该时间 如果距上次通话已过去 30 分钟 则会自动重新进行身份验证 我将把上次访问时间戳或日期存储在全
  • 如何将 CMake 文件 (GLOB SRCS *.) 与构建目录一起使用

    这是我当前的 CMakeLists txt 文件 cmake minimum required VERSION 3 3 set CMAKE C FLAGS Wall g project bmi file GLOB SRCS cpp h ad