CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
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)
message(${PROJECT_SOURCE_DIR}) MESSAGE(${PROJECT_BINARY_DIR})
include_directories(base/include)
link_directories(base/lib/openssl)
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/output/bin)
add_subdirectory(source/socket) add_subdirectory(source/tls) add_subdirectory(source/http)
set(SRC_LIST main.c)
add_executable(httpsd ${SRC_LIST})
message("====BEGIN LINK LIB====") target_link_libraries(httpsd http tls crypto ssl socket)
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})
|
链接静态库
编译小工具时,默认情况下C库会使用动态库,可以通过添加下面的语句使用静态链接
set(CMAKE_EXE_LINKER_FLAGS "-static")
|
错误示范
库文件命名:直接指定 libmbedtls.a 可能被 CMake 误解
set(CMAKE_EXE_LINKER_FLAGS "-static") link_directories(lib) target_link_libraries(${PROJECT_NAME} libmbedtls.a libmbedx509.a libmbedcrypto.a)
|
正确示范
set(CMAKE_EXE_LINKER_FLAGS "-static") link_directories(lib) target_link_libraries(${PROJECT_NAME} mbedtls mbedx509 lmbedcrypto)
|
GCC命令行编译补充
gcc main.c -I./include -L./lib -l:libmbedtls.a -l:libmbedx509.a -l:libmbedcrypto.a --static gcc main.c -I./include -L./lib -lmbedtls -lmbedx509 -lmbedcrypto --static
|
| 参数 |
解释 |
格式 |
| -I |
设置头文件搜索路径 |
-I${PATH} |
| -L |
设置库文件搜索路径 |
-L${PATH} |
| -l |
指定库文件 |
-l:libdemo.a/-ldemo |