我刚刚开始使用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。
答案 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})