CMakeLists.txt

#CMAKE定义的变量区分大小写,但命令不区分大小写
#CMKAE定义了两个变量: PROJECT_SOURCE_DIR 和 PROJECT_BINARY_DIR

#设置cmake的版本
cmake_minimum_required(VERSION 3.10)

#可以通过on/off编译过程的详细信息
SET( CMAKE_VERBOSE_MAKEFILE on )

#设置交叉编译器
set(CMAKE_C_COMPILER "mipsel-openwrt-linux-gcc")

set(CMAKE_C_FLAGS "-W -Wall -lpthread")
add_definitions("-Werror")

#设置工程名
project(httpsd) #定义了两个变量 demo_BINARY_DIR 和 demo_SOURCE_DIR

#message 相当于 echo,输出到屏幕
message(${PROJECT_SOURCE_DIR}) #CMakeLists.txt所在的文件夹,等价于PROJECT_SOURCE_DIR
MESSAGE(${PROJECT_BINARY_DIR}) #执行CMakeLists.txt的目录,等价于demo_BINARY_DIR

#设置头文件的搜索路径.一般情况下在源文件自己包含便于查找定义
include_directories(base/include)

#设置库文件路径,一般时target_link_libraries里需要添加的库
link_directories(base/lib/openssl)

#设置可执行文件的输出路径
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/output/bin)

#使用子CMakeLists.txt
add_subdirectory(source/socket) #添加子CMakeLists.txt的目录,会自动在PROJECT_SOURCE_DIR目录创建一个对应的目录,执行该子CMakeLists.txt
add_subdirectory(source/tls)
add_subdirectory(source/http)

#设置可执行文件的入口
set(SRC_LIST main.c)

#生成可执行文件
add_executable(httpsd ${SRC_LIST}) #告诉编译器生成一个可执行文件,生成的文件和project同名

#链接库文件
message("====BEGIN LINK LIB====")
target_link_libraries(httpsd http tls crypto ssl socket) #链接用到的库文件,库文件一般由lib开头,例如 libliblog.a我们使用的时候需要将第一个lib删除

install(TARGETS ${PROJECT_NAME} DESTINATION /home/kaikai/nfsshare/share_03)

子CMAKE

message("=====BEGIN MAKE SOCKET LIB=====")

aux_source_directory(. LIB_SRCS)

#设置编译的库文件输出目录
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/output/lib)

add_library(socket ${LIB_SRCS}) #告诉编译器生成一个库文件,默认是静态库,生成的文件名会加lib前缀,例如本例生成的库为 libliblog.a ,其他文件使用时需要用 liblog
# add_library(liblog SHARED ${LIB_SRC}) #生成动态库