cmake用* .cpp规则创建Makefile

时间:2016-05-27 14:16:32

标签: c++ makefile cmake

我刚刚开始使用cmake,我已经阅读了一些教程,并获得了基本的工作。

然而,目前我的CMakesList.txt生成一个Makefile,其中每个.cpp都明确命名。这意味着,每当我向项目中添加一个新的.cpp时,我需要重新运行cmake,然后才能创建。虽然这不是一个大问题,但它仍然有点烦人。

由于Makefile可以执行SOURCES=*.cpp之类的操作,我认为有可能告诉cmake使用这样的规则生成Makefile!?

我知道我能做到

cmake_minimum_required(VERSION 2.8)
file(GLOB SRC
    "*.h"
    "*.cpp"
)
add_executable(main ${SRC})

但是我还是要重新运行cmake。

3 个答案:

答案 0 :(得分:4)

据我所知,这样做的方法就像你说的那样,缺点是每次添加文件时都必须运行cmake。

我通常要做的就是制作一个调用cmake的自定义目标。它就像这样

ADD_CUSTOM_TARGET(update
    COMMAND ${CMAKE_COMMAND} ${CMAKE_SOURCE_DIR}
    COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target all
    COMMENT "Cmake and build"
)

有了这个,你可以调用make update,它会先调用cmake来捕获所有文件,然后开始构建过程。

答案 1 :(得分:3)

只有在您更改文件时才必须重新运行Cmake,因为CMake编译CMakeLists.txt一次,然后生成一个更高效的缓存中间格式。 (如果你没有添加任何新文件,只需运行make命令即可。)

请注意,CMake不能使用MakeFile的等效功能,否则会导致所有文件依赖性。 CMake不仅适用于Makefile,因此它只使用目标构建脚本的一部分功能。

此外,如果您已经直接使用CMake,则不再需要生成makefile,使用CMake,并且只有在需要将项目发送给具有Makefile但不是CMake的客户端时才生成makefile。

答案 2 :(得分:0)

您可以使用此:

file( GLOB_RECURSE
      source_files
      ./*
)

add_executable(main ${source_files})

最好将所有cpp和h文件放在src目录中,然后:

file( GLOB_RECURSE
      source_files
      src/*
)

add_executable(main ${source_files})