【问题标题】:CMAKE auto header file dependencyCMAKE自动头文件依赖
【发布时间】:2011-10-27 14:07:55
【问题描述】:

问题与本题类似

Handling header files dependencies with cmake

我有包含 main.c main.h 和 CMakeLists.txt 的示例程序目录

main.h 内容为

#ifndef MAIN_H
#define MAIN_H
int t=3;
int y=2;
#endif

main.c 内容为

#include <main.h>
#include<stdio.h>
int main(){

  printf("%d apple",t);
}

和 CMakeLists.txt

PROJECT( test )
AUX_SOURCE_DIRECTORY(. test_SRCS)
include_directories(.)
ADD_EXECUTABLE (main ${test_SRCS})

但是 cmake 不会在修改头文件时重建 main.c。 我希望它自动生成头文件依赖项。 是否可以使用 cmake ?

如果没有,还有其他工具可以做到吗?

【问题讨论】:

  • 这个例子的依赖管理对我来说工作正常(在 Linux 上使用 GCC 和 CMake 2.8.0)。
  • @antonakos 是否在修改 main.h 头文件时重新编译项目?
  • @antonakos 将最低版本指定为 2.8 它可以工作你能把你的评论作为答案吗?

标签: linux cmake


【解决方案1】:

正如我在评论中提到的,我已经尝试了您的示例并且一切正常:如果 main.h 被修改,那么 main.c 将被重新编译。

我安装的 CMake(2.8.0 版)告诉我要添加

cmake_minimum_required(VERSION 2.8)

CMakeLists.txt 文件,但这就是我需要的所有调整。

【讨论】:

    【解决方案2】:

    为谷歌搜索的其他人回答这个问题......

    我的一个项目遇到了这个问题。事实证明,我在运行 cmake 后将标头添加到 cpp 文件中。重新运行 cmake 解决了这个问题。如果遇到这种情况,请尝试一下,看看它是否能解决问题。

    【讨论】:

      【解决方案3】:

      来自AUX_SOURCE_DIRECTORY的cmake 2.8.0文档:

      使用这个命令来避免写入源列表是很有诱惑力的 库或可执行目标的文件。 虽然这似乎可行,但 CMake 无法生成一个知道何时 已添加新的源文件。 通常生成的构建系统 知道何时需要重新运行 CMake,因为 CMakeLists.txt 文件是 修改以添加新源。当源刚刚添加到 目录而不修改此文件,则必须手动 重新运行 CMake 以生成包含新文件的构建系统。

      为什么要避免创建文件列表?此类列表通常不会经常更改。

      【讨论】:

      • 很抱歉,您的回答超出了范围。我的问题是 cmake 不是在更改头文件时重建项目。
      • @VivekGoel - 废话,你说得对。我将它误解为也适用于文件修改。感谢您指出我的错误。
      猜你喜欢
      • 1970-01-01
      • 2011-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-07
      • 2017-02-14
      • 1970-01-01
      • 2019-03-19
      相关资源
      最近更新 更多