cmake引入第三方庫的debug和release版本之Windows版本


概述

  • 本文將介紹cmak引入第三方庫debug和release不同配置。
    Windows上,習慣將debug模式下生成的動態庫名后綴添加D 以作和release區分。cmake創建一個項目A,A引入動態庫B,cmake怎么配置A鏈接動態庫B的debug和release對應的庫呢
  • 本文的教程是基於 這里, 如果沒有看,我推薦你先看下,再閱讀本文。

就這一個核心函數,我通常使用它鏈接LIB。如下

	add_executable(exam_lib ${exam_src})

	# to link dynamic library 
	target_link_libraries(exam_calc ${PROJECT_NAME})

它還可以配置debug和release模式下的動態庫。

核心代碼

# -------------------------------------------------------------------------------------------
# 區分動態庫的debug和release
target_link_libraries ( ${PROJECT_NAME} PRIVATE
						debug ${calc_LIBRARY_debug}
						optimized ${calc_LIBRARY_release} )

就這一句,是不是簡單到爆炸。 其中。${calc_LIBRARY_debug} 是動態庫debug模式下的絕對路徑。 同理, ${calc_LIBRARY_release}是動態庫release模式下的絕對路徑。而他們的定義出現在 這里 提到的 findcalc.cmake文件中,

#指定庫頭文件所在路徑
FIND_PATH(calc_INCLUDE_DIR icalc.h ${CMAKE_CURRENT_SOURCE_DIR}/ext/calc/include)

#指定庫文件所在路徑
FIND_LIBRARY(calc_LIBRARY_release calc.lib ${CMAKE_CURRENT_SOURCE_DIR}/ext/calc/lib/release)

FIND_LIBRARY(calc_LIBRARY_debug calcD.lib ${CMAKE_CURRENT_SOURCE_DIR}/ext/calc/lib/debug)

# 為了下游可以繼續使用
set(calc_FOUND FALSE)
if (calc_INCLUDE_DIR AND calc_LIBRARY_release AND calc_LIBRARY_debug)
	set(calc_FOUND TRUE)
endif()

上面使用find_package鏈接第三方庫。

一個不完整例子

# 創建項目
add_library( ${PROJECT_NAME} SHARED ${book_src} ${book_header})
# -------------------------------------------------------------------------------------------
# 指定頭文件搜索路徑
target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include)
target_include_directories(${PROJECT_NAME} PRIVATE ${calc_INCLUDE_DIR})

# -------------------------------------------------------------------------------------------
# 區分動態庫的debug和release
target_link_libraries ( ${PROJECT_NAME} PRIVATE
						debug ${calc_LIBRARY_debug}
						optimized ${calc_LIBRARY_release} )


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM