子节点cmake可以使用父节点cmake定义的便变量,但是父节点不能使用子节点定义的变量
生成的库文件是静态库还是动态库的标准是看文件大小,如果太大动态库,小静态库,因为静态库会打包到程序中去,但是动态库可以共享内存
add_subdirectory(calc)需要根据子目录的文件名称添加否则找不到
目录如下
父CMakeList.txt
cmake_minimum_required(VERSION 3.15) project(test) #定义变量 #定义静态库生成的路径 set(LIBPATH ${PROJECT_SOURCE_DIR}/lib) #可执行文件的存储目录 set(EXECPATH ${PROJECT_SOURCE_DIR}/bin) #头文件目录 set(HEADPATH ${PROJECT_SOURCE_DIR}/include) #库文件的名称 set(CALCLIB calc) set(SORTLIB sort) #可执行文件的名称 set(APPNAME1 app1) set(APPNAME2 app2) #给当前文件添加子目录 需要根据子目录的文件名称添加否则找不到 add_subdirectory(calc) add_subdirectory(sort) add_subdirectory(test1) add_subdirectory(test2)
calc中CMakeList.txt
cmake_minimum_required(VERSION 3.15) project(calc) #搜索所有的源文件变成静态库 aux_source_directory(./ SRC) # 指定头文件包含的路径 include_directories(${HEADPATH}) # 指定静态库输出路径 set(LIBRARY_OUTPUT_PATH ${LIBPATH}) add_library(${CALCLIB} STATIC ${SRC})
sort中CMakeList.txt
cmake_minimum_required(VERSION 3.15) project(sort) #搜索所有的源文件变成静态库 aux_source_directory(./ SRC) # 指定头文件包含的路径 include_directories(${HEADPATH}) # 指定静态库输出路径 set(LIBRARY_OUTPUT_PATH ${LIBPATH}) add_library(${SORTLIB} STATIC ${SRC})
test1中CMakeList.txt
cmake_minimum_required(VERSION 3.15) project(test1) #搜索所有的源文件变成静态库 aux_source_directory(./ SRC) # 指定头文件包含的路径 include_directories(${HEADPATH}) link_libraries(${CALCLIB}) link_directories(${LIBPATH}) set(EXECUTABLE_OUTPUT_PATH ${EXECPATH}) add_executable(${APPNAME1} ${SRC})
test2中CMakeList.txt
cmake_minimum_required(VERSION 3.15) project(test2) #搜索所有的源文件变成静态库 aux_source_directory(./ SRC) # 指定头文件包含的路径 include_directories(${HEADPATH}) link_libraries(${SORTLIB}) link_directories(${HEADPATH}) set(EXECUTABLE_OUTPUT_PATH ${EXECPATH}) add_executable(${APPNAME2} ${SRC})