build
calc
include
src
CMakeLists.txt
根CMakeLists.txt(上层的变量子目录是可见的,而子目录的变量上层是不可见的)
12345678910111213141516171819
cmake_minimum_required(VERSION 3.20)project(v5)# 所有文件都依赖同一个include目录是不合理的# include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) # 头文件查找地址set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib) link_directories(${PROJECT_BINARY_DIR}/lib)set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)set(LIB_CALC calc) # 定义变量set(APP v5)add_subdirectory(calc)add_subdirectory(src)
calc CMakeLists.txt
123456789101112
# cmake_minimum_required(VERSION 3.20)# project(calc) # 一个project等于一个VS的.sln文件,所以如果不想生成多个sln,这里最好去掉aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} SRC)add_library(${LIB_CALC} SHARED ${SRC}) # 库名字一定要来自根节点,因为需要由根节点传递给子目录链接,定义在子目录外面不可见# 改成自己的include,需要在生成库之后,添加专属的头文件# 这里使用public是希望依赖这个库的src会继承这个语句,使用private编译src时会提示.h找不到# 两个地方都写成private也是可以的target_include_directories(${LIB_CALC} PUBLIC ../include)
src CMakeLists.txt
12345678
# cmake_minimum_required(VERSION 3.20)# project(main) # 一个project等于一个VS的.sln文件,所以如果不想生成多个sln,这里最好去掉aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} SRC)add_executable(${APP} ${SRC}) # 库名字一定要来自根节点,因为需要在根节点链接,定义在子目录外面不可见target_link_libraries(${APP} ${LIB_CALC})