默认vs filter
代码目录结构如下:
│ CMakeLists.txt
├─bin
│
├─main
│ main.cpp
│ main.h
│
├─math
│ │ kalman.cpp
│ │ kalman.h
│ │
│ └─matrix
│ quat.cpp
│ quat.h
│
└─uav
control.cpp
control.h
使用如下CMakeLists.txt
cmake_minimum_required(VERSION 2.8.9)
project(TEST)
set(SOURCES
main/main.h
main/main.cpp
math/kalman.h
math/kalman.cpp
math/matrix/quat.h
math/matrix/quat.cpp
uav/control.h
uav/control.cpp
)
add_executable(MAIN ${SOURCES})
那么生成的的工程文件中会有默认筛选器,Header Files 和 Source Files,如下,对于大型工程来说好多人不太习惯这种组织方式,而是想把同一类别头文件和源文件放一起,就如同代码的文件目录结构一致:
使用source_group建立筛选器
修改CMakeLists.txt如下:
cmake_minimum_required(VERSION 2.8.9)
project(TEST)
set(SOURCES
main/main.h
main/main.cpp
)
set(MATHSRC
math/kalman.h
math/kalman.cpp
)
set(MATSRC
math/matrix/quat.h
math/matrix/quat.cpp
)
set(UAVSRC
uav/control.h
uav/control.cpp
)
source_group(main FILES ${SOURCES})
source_group(math FILES ${MATHSRC})
source_group(math\\matrix FILES ${MATSRC})
source_group(uav FILES ${UAVSRC})
add_executable(MAIN ${SOURCES} ${MATHSRC} ${MATSRC} ${UAVSRC})
我们发现默认的两个筛选器Header Files 和 Source Files消失了。
- FILE 全局搜索文件存入变量中
#全局搜索.h和.cpp文件放入LOGWIN变量中
FILE(GLOB LOGWIN "log/logan-win/*.h" "log/logan-win/*.cpp")
FILE(GLOB CLOGAN "log/logan-win/Clogan/*.h" "log/logan-win/Clogan/*.c")
FILE(GLOB MBEDTLS_INCLUDE "log/logan-win/mbedtls/include/mbedtls/*.h" )
FILE(GLOB MBEDTLS_LIB "log/logan-win/mbedtls/library/*.h" "log/logan-win/mbedtls/library/*.c")
- source_group 用于整理工程中的文件,将头文件源文件那目录结构进行分组
source_group(log/logan-win FILES ${LOGWIN})
source_group(log/logan-win/Clogan FILES ${CLOGAN})
source_group(log/logan-win/mbedtls/include FILES ${MBEDTLS_INCLUDE})
source_group(log/logan-win/mbedtls/library FILES ${MBEDTLS_LIB})