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

为什么当头文件更改时,CMake构建不启动构建

当头文件更改时,CMake构建不会自动启动构建的原因是CMake在构建过程中会检查源文件的时间戳来确定是否需要重新编译。头文件通常被包含在源文件中,而不是直接被构建系统所使用。因此,当只有头文件发生更改时,源文件的时间戳并不会改变,CMake无法检测到变化,从而不会触发重新构建。

为了解决这个问题,可以采取以下几种方法:

  1. 手动重新运行CMake:当头文件发生更改时,可以手动运行CMake来重新生成构建系统的配置文件。这可以通过在命令行中运行CMake命令来实现,例如:cmake .。这将重新生成构建系统所需的Makefile或其他构建文件,并触发重新构建。
  2. 强制重新编译:可以通过在CMakeLists.txt文件中使用set_source_files_properties命令来强制重新编译源文件。例如,可以将以下代码添加到CMakeLists.txt文件中:
  3. 强制重新编译:可以通过在CMakeLists.txt文件中使用set_source_files_properties命令来强制重新编译源文件。例如,可以将以下代码添加到CMakeLists.txt文件中:
  4. 这将告诉CMake只将source_file.cpp视为头文件,即使它实际上是源文件。这样,当头文件发生更改时,CMake将重新编译该文件。
  5. 使用依赖关系:如果头文件的更改会影响到其他源文件的编译结果,可以在CMakeLists.txt文件中明确指定依赖关系。例如,可以使用add_dependencies命令将源文件与头文件关联起来,以确保在头文件更改时重新编译相关的源文件。
  6. 使用依赖关系:如果头文件的更改会影响到其他源文件的编译结果,可以在CMakeLists.txt文件中明确指定依赖关系。例如,可以使用add_dependencies命令将源文件与头文件关联起来,以确保在头文件更改时重新编译相关的源文件。
  7. 这将告诉CMake在构建目标时检查头文件的时间戳,并在需要时重新编译相关的源文件。

总结起来,当头文件更改时,CMake构建不会自动启动构建是因为CMake默认只检查源文件的时间戳来确定是否需要重新编译。为了解决这个问题,可以手动重新运行CMake、强制重新编译源文件或使用依赖关系来确保在头文件更改时重新构建相关的源文件。

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

相关·内容

kudu-1:原生方式在aws的centos8系统上搭建生产级kudu集群

1.3.5.5.确认磁盘挂载点重启生效 1.3.5.6.部署supervisor 1.3.5.7.安装cmake 1.3.6.源码构建kudu 1.3.7.配置supervisor的kudu启动配置文件....配置与启动kudu的3节点集群 (4).问题与注意事项 1.kudu-master的3个节点必须在短时间内同时启动 (1).为什么不使用CDH/ambari/云服务 ambari已经被CDH所在公司收购...至于为什么不使用云服务,也是费用问题,因为是hadoop-flink集群用于实时计算,云服务的实时计算资源是非常昂贵的。...cmake-3.21.3-linux-x86_64.tar.gz /app/download/ 1.3.6.源码构建kudu 下载kudu1.15.0-release版本: https://github.com...sudo make DESTDIR=/opt/kudu install 1.3.7.配置supervisor的kudu启动配置文件 使用kudu用户启动kudu。

1.3K10

Android Studio3.0新特性及安装图文教程

如果程序在断点上暂停,则应用程序重新启动。但是,如果应用程序没有在断点上暂停,则只有在方法实现更改时,才能重新启动并且热插拔应该工作。...单击NETWORK,CPU或MEMORY时间线,以打开每个分析器的详细视图。 ?...要启动自适应图标向导,请右键单击/res项目中的 文件夹,然后单击新建 图像资源 启动器图标(自适应和旧版)。 新的XML字体预览,字体选择工具以及对可下载字体的支持。...} } (13).APK分析仪的改进 显示以前可用的包,类和方法之外的字段 顶部显示和隐藏字段和方法的新过滤选项 在树视图中,以斜体显示的节点是未在DEX文件中定义的引用 对于启用Proguard构建的...变异感知依赖解决方案仅适用于您正在构建的项目和变体。 对代码或资源应用简单的更改时,更快的增量构建时间。

4.2K00
  • CMake vs Make对比

    你应该在终端上运行“cmake”和“make”命令。很多人只是盲目地按照指示,不是真的关心为什么我们需要以某种方式做事情。这个整个构建过程是什么,为什么它这样构造?CMake和Make之间有什么区别?...为什么我们需要“Make”? 我们需要“Make”的原因是因为它使最终用户能够构建和安装您的软件包,而无需了解其操作的详细信息。...CMake解决了同样的问题,但与此同时,它具有优于GNU构建系统的一些优点: 用于编写CMakeLists.txt文件的语言是可读和易于理解的。 它不仅依靠“Make”来构建项目。...当将CMake与Make进行比较时,使用CMake有几个优点: 跨平台发现系统库。 自动发现和配置工具链。 将文件容易地以平台的方式将文件编译到共享库中,并且一般比make容易使用。...CMake不仅仅是“make”,所以它可以复杂。从长远来看,最好是学习如何使用它。如果只在一个平台上只有一个小项目,那么也许“Make”可以做得更好。

    4K31

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

    在 Windows 上,我们还需要一个构建工具来完成由 CMake 启动构建过程。...选择和配置生成器决定了我们将使用我们系统中的哪个构建工具来构建构建文件将呈现什么样子,以及构建树的结构将如何。 那么,你应该关心吗?幸运的是,答案通常是“”。...这些信息存储在构建树目录中的CMakeCache.txt文件中。有一些选项可以让你方便地管理该文件。...因此,建议手动编辑它们。CMake 使用它们作为 cmake 安装操作、CTest 和 CPack 的配置。如果您实现源代码构建建议),添加到 VCS 忽略文件中可能是个不错的主意。...如果我们只是将生成的、用户或临时文件添加到.gitignore文件中,项目卫生容易维护。这样,Git 就知道在构建新提交时自动跳过它们。

    1.2K01

    聊一聊鸿蒙的构建系统

    构建系统简介 这么些年的开发生涯中,接触过很多个软件构建系统。为什么开发软件需要构建系统呢? 回想一下我们刚开始学习编程,通常代码量比较小,编写的源代码只有几个文件。...第二步才是启动 GNU Make 的构建过程,第三步则是依照Makefile 定义的规则将程序安装到系统指定的目录下。...没错,鸿蒙系统采用的是谷歌开发的 GN 构建系统。为什么选择 GN 构建系统?根据谷歌官网给出的说法,GN 构建系统具有如下优点: 可读性更好,容易编写和维护。...修改 GN 文件后,执行 ninja 构建时会自动更新 Ninja 构建文件简单的模块依赖,提供了 public_deps, data_deps 等。 提供了更好的工具查询模块依赖图谱。...,参考现有的 GN 文件,可以很快的掌握,这里先展开。

    1.5K20

    C++ 和 Android 本地 Activity 初探

    你可能会发现,尽管 C 有学习成本,但使用 C++ 解决一些常见代码难题,比如从游戏数据中构建顶点属性数组,会比用高级语言容易。...启动 Android Studio: ? 在 “Configure” 下面选择 “SDK Manager”: ? 从这里安装 LLDB(本地调试器)、CMake构建系统)和 NDK 本身: ?...现在我们需要建一个 CmakeLists.txt 文件来告诉 Android 如何构建我们的 C++ 工程。在工程视图下右击 app 创建一个新文件: ?...我还添加了一个必须要创建的源文件为什么是共享库而不是可执行文件呢?Android 使用一个名为 Zygote 的进程来加速在 Android Runtime 内部启动的应用或服务的过程。...是我在 Android 上使用 C++ 时首选的构建系统,可以在这里找到参考页面:cmake.org/ 如果你刚开始学 CMake,或者你对以 target_include_directories 替代

    1.4K30

    《世嘉新人培训教材—游戏开发》2DGraphics1项目cmake构建

    ,然后运行可以看到如下的界面: 将drawPixels作为启动项,运行可看到如下效果: 接下来,我们将使用cmake来移植这两个项目。...使用cmake搭建2DGraphics1项目 在经过前戏后,我们终于编译出了2DGraphics1所需要的GameLib_d.lib静态库以及相关的头文件,并且,我们还构建了2DGraphics1样例解决方案中的...这里有一篇特别详细的博文CMake基础 第13节 构建子项目 - 橘崽崽啊 - 博客园 (cnblogs.com) 头文件与静态库添加 在前面我们已经编译出了GameLib_d.lib,并且把头文件已经复制到了指定目录...该问题原因在于CLion中的文件是默认使用的UTF-8编码,而msvc在指定的情况默认以当前代码页(936)编码方式读取文件(代码页936(Codepage 936)是Microsoft的简体中文字符集标准...那么,为什么vs项目能够正确运行起来呢?

    48540

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

    每当引入一个向后兼容的更改时,它都会附带一个策略,启用新的行为。 通过调用cmake_minimum_required(),我们告诉 CMake 需要应用到提供参数中的版本的策略。...这不仅允许干净的构建树和简单的.gitignore文件,而且还减少了你意外覆盖或删除任何源文件的可能性。...,当我们对.proto文件进行更改时,一切都会自动编译和更新。...编译器并不是真正那么擅长多线程编译,因为它们不需要——构建系统通常会启动许多编译任务,以便在不同的线程上同时执行所有文件。...如果我们没有仪器帮助我们导航暴风雨,盲目飞行会困难。这就是为什么我们应该非常小心地设置我们的环境,使这个过程尽可能容易和可忍受。

    56200

    程序员C语言快速上手——工程篇(十三)

    文件 生成 Visual Studio工程 其他环境 补充 C语言工程构建 为什么需要编译脚本?...既然可以通过命令行脚本(shell)完成编译工作,为什么还需要Makefile脚本文件呢?...而make 工具会自动根据修改情况完成源文件的对应.o文件的更新、库文件的更新以及最终的可执行程序的更新,它实际上是通过比较对应文件的最后修改时间,来决定哪些文件需要更新、那些文件不需要更新。...现在我们用CMake工具编写构建脚本,就与平台无关了,它会自动生成对应平台的构建方案,再也不用程序员去操心了。准确的说,CMake工具真正厉害的地方并不只是跨平台,而是跨编译环境。...到这里我们已经学会了cmake构建的简单流程,接下来只需要学习一下 CMakeList.txt文件的编写规则 基础规则 CMakeLists.txt文件由命令、注释和空格组成,其中命令是区分大小写的。

    3.1K30

    解决CMAKE_CURRENT_SOURCE_DIR

    它能够帮助开发者方便地构建、测试和部署他们的软件项目。为什么选择CMake?...CMake有以下几个优点,使其成为选择构建工具的一个好选择:简洁和易读:CMake使用基于文本的配置文件来描述项目的构建过程。这些配置文件可读性很高,易于理解和维护。...跨平台支持:CMake可以生成适用于多种操作系统和编译器的构建脚本。这意味着你可以使用相同的CMake配置文件在不同的平台上构建你的项目。...以上只是一些常用的命令,CMake提供了很多其他的命令和特性,用于处理复杂的构建需求。CMake是一个强大而灵活的构建工具,适用于各种规模的项目和不同的平台。...它通过简洁的配置文件来描述项目的构建过程,提供了跨平台支持和丰富的功能,使得开发者能够方便地管理和构建他们的项目。如果你正在寻找一个跨平台、易读、可扩展的构建工具,CMake是一个值得考虑的选择。

    43830

    LAMP之Mysql源码配置安装

    该值可以在服务器启动时使用该--datadir选项进行设置 。 -DMYSQL_UNIX_ADDR=file_name 服务器侦听套接字连接的Unix套接字文件路径。这必须是绝对路径名称。...允许的字符集在cmake/character_sets.cmake文件中被列为 值CHARSETS_AVAILABLE。...例如,如果您通常构建MySQL,将对象输出放置在bldMySQL源代码树的子目录中,则可以使用Boost构建,如下所示: mkdir bld cd bld cmake .....但是,如果MySQL所需的Boost版本发生更改并且本地安装的版本尚未升级,则可能会出现构建问题。使用CMake 选项应该给你一个成功的构建。...通过上述允许将Boost下载到指定位置的设置,当所需的Boost版本发生更改时,您需要删除该bld文件夹并重新创建该文件夹,然后再次执行cmake步骤。

    1K10

    ROS 2 ardent apalone安装和使用说明

    ROS 1中的开发空间的一个原因是使开发人员能够更改文件,例如Python代码或启动文件,并直接使用修改后的代码,而无需重新编译软件包。...支持catkin_simple用例 在ROS 1中,包catkin_simple旨在使编写ROS包的CMake代码变得容易。...在ROS 2中,CMake API进行了重组,以支持这个用例。 对没有清单的软件包的最小支持 在ROS 1中,构建系统只考虑具有清单文件的包。...在ROS 2中,可以在没有清单文件文件夹中检测具有支持的构建系统的包。如果软件包遵循惯例,甚至有可能检测到一些缺失的元信息(如依赖关系)。 消息,服务 有关更多信息,请参阅ROS接口定义文章。...工具 roslaunch(⏳) 在ROS 1中,roslaunch文件是用XML定义的,功能非常有限。在ROS 2中,启动文件是用Python编写的,可以使用复杂的逻辑,如条件等。

    1.6K10

    CMake使用教程和原理

    一、什么是CMake CMake是一个主要用于CPP的构建工具。CMake语言是平台无关的中间编译工具。同一个CMake编译规则在不同系统平台构建出不同的可执行构建文件。...有经验的Windows开发人员喜欢使用集成开发环境(IDE)。 1.2 Cmake的使命 创建和源代码库隔离的构建目录,分离开发和构建目录。易于进行源代码版本控制。...CMake是具有管理依赖项,依赖之间的关系。如果变更了源文件,必须重新构建所有依赖该源文件的脚本。 并且要求高效的依赖关系解析是耗时短的。...image.png 2.3 依赖管理和更新构建 CMake在使用IDE的平台生成依赖,这些依赖由IDE自己完成。... 14):为什么是CXX 3.7.6、包含外部子target #include(TARGET),它会去子文件cmake/搜索TARGET.cmake文件

    12.6K296

    CMake使用总结

    message(${MY_VAR}) 构建类型 cmake默认支持多种构建类型(build type),每种构建类型都有专门的编译参数变量,详情见下表[1]: CMAKE_BUILD_TYPE 对应的..."-O2") 然后运行cmake的时候,传入相应的构建类型即可 cmake -DCMAKE_BUILD_TYPE=Release 常用命令 详情可参考对应版本的CMake文档。...file(GLOB_RECURSE CMAKE_FILES "src/cmake*") 按照官方文档的说法,建议使用file的GLOB指令来收集工程的源文件,原文解释如下 We do not recommend...大意就是,GLOB收集的源文件增加或删除,而CMakeLists.txt没有发生修改时CMake不能识别这些文件。...其实,当CMakeLists.txt使用aux_source_directory和file glob查找工程源文件时,如果添加或删除源文件,都需要重新运行CMake

    1.7K10

    cmake 学习笔记(一)

    )采用了cmake作为构建系统 开源的图像处理库 opencv 采用cmake 作为构建系统 ......方式来构建(即生成中间产物与源代码分离),并始终坚持这种方法,这也就是此处为什么单独创建一个目录,然后在该目录下执行 cmake 的原因 cmake .....add_library 则告诉生成一个库文件。 注意:CMakeList.txt 文件中,命令名字是区分大小写的,而参数和变量是大小写相关的。...由于系统中可能有多套构建环境,我们可以通过-G来制定生成哪种工程文件,通过 cmake -h 可得到详细信息。...要显示执行构建过程中详细的信息(比如为了得到详细的出错信息),可以在CMakeList.txt内加入: SET( CMAKE_VERBOSE_MAKEFILE on ) 或者执行make时 $ make

    53110

    小白入门笔记:CMake编译过程详解

    以自动化的方式构建代码的问题比CMake 出现的要早得多,所以会有很多选择:Make、Autotools、SCons、Ninja、Premake 等。但为什么CMake 可以后来居上呢?...另一个需要注意的点在于,环境变量在启动CMake进程后会基于CMake在配置阶段中收集的信息在CMake生成阶段生成环境变量的副本,该副本会在单一的、全局的作用域中可用。...与SHARED库不同,它们链接到项目中的任何目标,不过可以进行动态加载。该参数可以用于构建运行时插件。...该变量默认为空,CMake识别的值为: • Debug:用于在没有优化的情况下,使用带有调试符号构建库或可执行文件。 • Release:用于构建的优化的库或可执行文件包含调试符号。...• RelWithDebInfo:用于构建较少的优化库或可执行文件,包含调试符号。 • MinSizeRel:用于增加目标代码大小的优化方式,来构建库或可执行文件

    6K31

    第6节:cmake语法介绍

    .cmake是解决Makefile种类多,规范不一.cmake是跨平台的构建工具.是Makefile的上层工具.自动构建出makefile,取代开发者手工构建makefile的繁琐过程....目前很多开源的额项目都有CMakeLists.txt文件,快捷的实现跨平台构建源码.真正做到"Write Once,Run everywhere"....CMake变量 cmake文件包括命令+注释+空格+换行; cmake编写的源文件以CMakeLists.txt或.cmake为扩展 CMakeLists.txt编写的整个项目的构建规则(放在顶层目录)...,可通过add_subdirectory()命令把下一层源码目录的构建规则添加进去 Cmake的源文件中国所有有效的语句都是命令 常见变量名 PROJECT_NAME project 命令中写的项目名...如果修改时通过set命令明确指定PARENT_SCOPE参数,修改的变量作用域就是在上一层作用域,而不是当前作用域。

    65010

    CMake基础

    ,和生成各文件的规则 make a.out 敲下这个命令,就可以构建出 a.out 这个可执行文件了 和直接用一个脚本写出完整的构建过程相比,make 指明依赖关系的好处: 1.当更新了hello.cpp...CMake 为了解决 make 的以上问题,跨平台的 CMake 应运而生: 只需要写一份 CMakeLists.txt,他就能够在调用时生成当前系统所支持的构建系统 CMake 可以自动检测源文件和头文件之间的依赖关系...,并开始构建 a.out: make -C build 以下命令和上一个等价,但跨平台: cmake --build build 执行生成的 a.out: build/a.out 2.为什么需要库...表示当前路径,因为子目录里的路径是相对路径,类似还有 … 表示上一层目录 此外,如果希望让引用 hellolib 的可执行文件自动添加这个路径,把 PUBLIC 改成 PRIVATE 即可,这就是他们的用途...以及可以通过下列指令(推荐使用),把选项加到所有接下来的目标去: include_directories(/opt/cuda/include) # 添加头文件搜索目录 link_directories

    1.9K20

    在tinycolinux上编译seafile

    coco2dx,还比如我们要谈到的seafile,《在tinycolinux上编译odoo》一文中我们把曾odoo称为mineportalv2 - 它是groupware,vs odoo,seafile接近...或autotools构建) libevhtp-1.1.6.tar.gz(一个强化libevent的http库,c项目,cmake构建) ccnet-server-6.2.5-server.tar.gz(...seafile-server-6.2.5-server.tar.gz(seafile负责文件传输的业务服务器,c+py混合项目as pylib,autotools构建) seahub-6.2.5-server.tar.gz...就是用来产生这个套件的总工具,并负责调用seahub根下的manage.py来启动,下面我们用官方方法-即seafile-admin来产生套件并启动它: 在任意目录新建一个data文件夹,然后产生data...恩恩 ----- (此处设回复,扫码到微信参与留言,或直接点击到原文) [qrcode.png]

    92430
    领券