我正在考虑将跨平台项目从Visual C,XCode和makefile中的单独构建管理系统切换到CMake .
我需要的一个基本功能是自动将目录中的所有文件添加到目标 . 虽然这很容易使用make,但使用Visual C和XCode并不容易(如果我错了,请纠正我) . 是否有可能直接在CMake中进行?怎么样?
在学习CMake之前,请随意添加我应该注意的任何其他事情,考虑到目前该项目是中等规模的(8个库,2个可执行文件,8个测试项目,它取决于大约8个外部库) .
克莱斯特的答案肯定有效,但有一个重要的警告:
手动编写 Makefile 时,可以使用函数生成 SRCS 变量以选择所有 .cpp 和 .h 文件 . 如果稍后添加了源文件,则重新运行 make 将包含它 .
Makefile
SRCS
.cpp
.h
make
但是,CMake(使用 file(GLOB ...) 之类的命令)将显式生成文件列表并将其放在自动生成的 Makefile 中 . 如果您有新的源文件,则需要通过重新运行 cmake 来重新生成 Makefile .
file(GLOB ...)
cmake
编辑:无需删除Makefile .
有可能的 . 例如 . 与 file(GLOB :
file(GLOB
cmake_minimum_required(VERSION 2.8) file(GLOB helloworld_SRC "*.h" "*.cpp" ) add_executable(helloworld ${helloworld_SRC})
请注意,如果添加或删除源文件,则需要手动重新运行 cmake ,因为生成的构建系统不知道何时要求CMake重新生成,并且在每次构建时执行此操作都会增加构建时间 .
2 回答
克莱斯特的答案肯定有效,但有一个重要的警告:
手动编写
Makefile
时,可以使用函数生成SRCS
变量以选择所有.cpp
和.h
文件 . 如果稍后添加了源文件,则重新运行make
将包含它 .但是,CMake(使用
file(GLOB ...)
之类的命令)将显式生成文件列表并将其放在自动生成的Makefile
中 . 如果您有新的源文件,则需要通过重新运行cmake
来重新生成Makefile
.编辑:无需删除Makefile .
有可能的 . 例如 . 与
file(GLOB
:请注意,如果添加或删除源文件,则需要手动重新运行
cmake
,因为生成的构建系统不知道何时要求CMake重新生成,并且在每次构建时执行此操作都会增加构建时间 .