概 述
CMake中查找源文件的方式盾戴。
實 現(xiàn)
最簡單的方式就是在添加可執(zhí)行文件時油吭,指定需要的源文件勾扭,例如:
add_executable(Demo main.cpp)
除此以外矫钓,還可以使用 set()
將源文件設置為變量要尔,通過變量指定舍杜,如下:
set(DEMO_SRCS
main.cpp
)
add_executable(Demo ${DEMO_SRCS})
以上兩種方式,在源文件比較多的時候赵辕,就比較麻煩既绩,需要一個一個的添加。
我們可以使用 aux_source_directory()
查找目錄中的所有源文件还惠,例如:
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/base DEMO_SRCS)
add_executable(demo ${DEMO_SRCS})
即將當前base目錄下的所有源文件饲握,存儲為 DEMO_SRCS
并指定添加。
但是蚕键,aux_source_directory()
無法遞歸子目錄收集源文件救欧。如果我們需要指定某一個目錄下(包括子目錄)的所有源文件,可以使用 file(GLOB_RECURSE)
嚎幸,如下:
file(GLOB_RECURSE DEMO_SRC "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp")
file(GLOB_RECURSE DEMO_INC "${CMAKE_CURRENT_SOURCE_DIR}/*.h")
add_executable(demo ${DEMO_INC} ${DEMO_SRC})
該 GLOB_RECURSE
模式會遍歷匹配目錄的所有子目錄颜矿,匹配文件。
注: 后兩種方式嫉晶,在添加或刪除源文件時骑疆,無需對 CMakeLists.txt
文件進行更改,因此生成的構(gòu)建系統(tǒng)無法知道何時要求 CMake
重新生成替废。所以在添加或刪除源文件時箍铭,我們需要手動去重新生成。
GitHub Blog 同步更新