CMAKE自动头文件依赖项

时间:2011-10-27 14:07:55

标签: linux cmake

问题类似于这个问题

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?

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

3 个答案:

答案 0 :(得分:3)

正如我的评论中提到的,我已经尝试了您的示例,但事情正常运行:如果修改了main.h,则会重新编译main.c

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

cmake_minimum_required(VERSION 2.8)

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:-1)

来自AUX_SOURCE_DIRECTORY的cmake 2.8.0文档:

  

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

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