Cmake构建工程设计——Cmake程序编译

编译库

编译库按照以下步骤依次进行

设置库编译出来后存放的路径,该配置可放在*.cmake中

set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/target/libs)

设置库的名称:set

编译库的名称设置为test_lib,保存到变量SOURCE_LIB中

set(SOURCE_LIB test_lib)

添加库源码:aux_source_directory

将编译库所需的源码保存到变量CODE_SOURCE中

aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/src CODE_SOURCE)

编译动态库:add_library:SHARED

add_library(${SOURCE_LIB} SHARED ${CODE_SOURCE})

编译静态库:add_library:STATIC

add_library(${SOURCE_LIB} STATIC ${CODE_SOURCE})

编译静态库与动态库根据项目情况两者二选一

添加头文件:target_include_directories

头文件设置公共头文件

target_include_directories(${SOURCE_LIB} 
    PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/inc)
  1. 可选项:添加子目录代码
    若源码在子目录下,采用add_subdirectory添加子目录文件夹。
    然后采用target_sources添加源码。采用target之前,add_subdirectory要放在添加库之后
add_subdirectory(add_code)

在add_code文件夹下,也放置有CMakeLists.txt文件

target_include_directories(${MODULE_LIB} 
    PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/inc)

aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/src SRC_CODE)

target_sources(${MODULE_LIB} PRIVATE ${SRC_CODE})
  1. 可选项:添加库的版本描述:set_target_properties
    该方法仅仅针对so库有效
set_target_properties(${SOURCE_LIB} PROPERTIES VERSION 1.2.3.4 SOVERSION 5)

编译出来的静态库库效果

:~/test_Makefile/target/libs$ ll
总用量 24
drwxrwxr-x 	2 ghost ghost   4096 108 20:14 ./
drwxrwxr-x 	3 ghost ghost   4096 108 20:14 ../
-rw-rw-r-- 	1 ghost ghost  12716 108 20:14 libtest_lib.a

编译出来的动态库库效果

:~/test_Makefile/target/libs$ ll 
总用量 20
drwxrwxr-x 	2 ghost ghost   4096 108 20:11 ./
drwxrwxr-x 	3 ghost ghost   4096 108 20:11 ../
lrwxrwxrwx 	1 ghost ghost     16 108 20:11 libtest_lib.so -> libtest_lib.so.5*
-rwxrwxr-x 	1 ghost ghost  12192 108 20:11 libtest_lib.so.1.2.3.4*
lrwxrwxrwx 	1 ghost ghost     22 108 20:11 libtest_lib.so.5 -> libtest_lib.so.1.2.3.4*

库链接

当前编译的库,工程中的可执行文件需要用到,即可在此链接

target_link_libraries( ${PROJECT_APP} PRIVATE ${SOURCE_LIB})

安装库

将生成的库文件安装到指定路径或系统默认路径下

install(TARGETS ${SOURCE_LIB}
        CONFIGURATIONS ${CMAKE_BUILD_TYPE}
        ARCHIVE DESTINATION ${PROJECT_SOURCE_DIR}/target/${CMAKE_BUILD_TYPE}/staticLib
        LIBRARY DESTINATION ${PROJECT_SOURCE_DIR}/target/${CMAKE_BUILD_TYPE}/sharedLib)

编译库的CMakeLists.txt文件

set(SOURCE_LIB test_lib)

aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/src CODE_SOURCE)

add_library(${SOURCE_LIB} ${LIB_TYPE} ${CODE_SOURCE})

target_include_directories(${SOURCE_LIB}
    PRIVATE ${PROJECT_SOURCE_DIR}/src/include
    PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/inc)

set_target_properties(${SOURCE_LIB} PROPERTIES VERSION 1.2.3.4 SOVERSION 5)

target_link_libraries( ${PROJECT_APP} PRIVATE ${SOURCE_LIB})

install(TARGETS ${SOURCE_LIB}
        CONFIGURATIONS ${CMAKE_BUILD_TYPE} # Debug 或 Release
        ARCHIVE DESTINATION ${PROJECT_SOURCE_DIR}/target/${CMAKE_BUILD_TYPE}/staticLib  #静态库安装路径
        LIBRARY DESTINATION ${PROJECT_SOURCE_DIR}/target/${CMAKE_BUILD_TYPE}/sharedLib) #动态库安装路径

编译可执行文件

设置可执行文件编译出来后的存放路径,该配置可放在*.cmake中

set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/target)

设置可执行文件的名称:set

编译可执行文件的名称设置为project_app,保存到变量PROJECT_APP中

set(PROJECT_APP project_app)

添加编译文件:add_executable

add_executable(${PROJECT_APP})

添加源码:aux_source_directory

将编译所需的源码保存到变量CODE_SOURCE中

aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/src CODE_SOURCE)

添加头文件:target_include_directories

由于不是编译库文件,因此作用范围可以设置成PRIVATE

target_include_directories(${PROJECT_APP} 
	PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include)
  1. 可选项:链接库target_link_libraries
    可执行文件如果需要用到库,即可连接对应的库文件,要保证库文件的头文件包含在target_include_directories或者编译时采用作用域PUBLIC进行编译
target_link_libraries( ${PROJECT_APP} PRIVATE 
	test_lib
	algorithmTest
	module)

这步如果有上面编译库的时候链接进来,可以忽略。

  1. 可选项:添加子目录代码
    若源码在子目录下,采用add_subdirectory添加子目录文件夹。操作方法与添加库的方法一样。

安装可执行文件

将生成的可执行文件安装到指定路径或系统默认路径下

install(TARGETS ${PROJECT_APP}
        CONFIGURATIONS ${CMAKE_BUILD_TYPE}
        RUNTIME DESTINATION ${PROJECT_SOURCE_DIR}/target/${CMAKE_BUILD_TYPE})

编译可执行文件的CMakeLists.txt文件

set(PROJECT_APP project_app)

# 添加可执行文件
add_executable(${PROJECT_APP})

# 添加头文件依赖
target_include_directories(${PROJECT_APP} 
	PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include)

# 添加宏定义
target_compile_definitions(${PROJECT_APP} 
	PRIVATE -D DEFINE_TEST)

add_subdirectory(app)
add_subdirectory(lib)
add_subdirectory(system)

install(TARGETS ${PROJECT_APP}
        CONFIGURATIONS ${CMAKE_BUILD_TYPE}
        RUNTIME DESTINATION ${PROJECT_SOURCE_DIR}/target)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值