1、aux_source_directory指令
aux_source_directory(< dir > < variable >)
比如:
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} ALL_SOURCE) , 这样将当前目录所有的源文件(.cpp 和.c文件)都放到了ALL_SOURCE变量中,但是头文件并没有被包括进去,若在头文件有函数的实现部分,采用这种方式就容易出问题,所有我很少使用这种方式。
2、file指令,我通常使用这种方式
比如:
file(GLOB ALL_SOURCE "*.cpp" "*.c")
file(GLOB ALL_HEAD "*.hpp" "*.h")
这样就将当前目录所有的源文件都放在了ALL_SOURCE变量中,所有的头文件放在了ALL_HEAD中。
另外,file里面的第一个参数若使用GLOB_RECURSE,不仅能包括当前目录的文件,也可以包括当前目录子目录下面的文件,比如:
file(GLOB_RECURSE ALL_SOURCE "*.cpp" "*.c")
file(GLOB_RECURSE ALL_HEAD "*.hpp" "*.h")
采用这种方式需要注意编译程序时,临时创建的build目录不要放在CMakeLists.txt文件的同目录或者子目录下,因为cmake在编译过程中也会产生临时的cpp文件,这样这些临时文件又被包括进去,就会报错,所以需要在外层目录编译