update cmakelists

This commit is contained in:
yizhangss
2021-04-15 12:24:28 +08:00
parent 53b5d140c9
commit 7acb89acfc
3 changed files with 72 additions and 133 deletions

View File

@@ -1,73 +1,34 @@
# 设定源文件文件夹
aux_source_directory(. WAVE_SRC)
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
set(SOURCE_FILES conv.c
cwt.c
cwtmath.c
hsfft.c
real.c
wavefilt.c
wavefunc.c
wavelib.c
wtmath.c
)
set(HEADER_FILES conv.h
cwt.h
cwtmath.h
hsfft.h
real.h
wavefilt.h
wavefunc.h
wtmath.h
)
#add_library(wavelib STATIC ${SOURCE_FILES} ${HEADER_FILES})
set(CMAKE_MACOSX_RPATH 1)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
add_library(wavelib SHARED ${SOURCE_FILES} ${HEADER_FILES})
# 以下部分为库的编译
# 注意目标名必须唯一 所以不能直接生成相同名称的动态库与静态库
# 注意此处不必为目标名称添加lib前缀和相应后缀cmake会自行添加
add_library(wavelib SHARED ${WAVE_SRC})
# 首先添加静态库的生成命令
add_library(wavelib_static STATIC ${SOURCE_FILES} ${HEADER_FILES})
add_library(wavelib_static STATIC ${WAVE_SRC})
# 设置静态库的输出名称从而获得与动态库名称相同的静态库
set_target_properties(wavelib_static PROPERTIES OUTPUT_NAME "wavelib")
# 设置输出目标属性以同时输出动态库与静态库
set_target_properties(wavelib PROPERTIES CLEAN_DIRECT_OUTPUT 1)
set_target_properties(wavelib_static PROPERTIES CLEAN_DIRECT_OUTPUT 1)
# 设置动态库的版本号
set_target_properties(wavelib PROPERTIES VERSION 1.0 SOVERSION 1.0)
# 设置库文件的输出地址
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
include(CheckSymbolExists)
# 设置编译选项
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2")
# https://stackoverflow.com/questions/32816646/can-cmake-detect-if-i-need-to-link-to-libm-when-using-pow-in-c
if(NOT POW_FUNCTION_EXISTS AND NOT NEED_LINKING_AGAINST_LIBM)
check_symbol_exists(pow "math.h" POW_FUNCTION_EXISTS)
if(NOT POW_FUNCTION_EXISTS)
unset(POW_FUNCTION_EXISTS CACHE)
list(APPEND CMAKE_REQUIRED_LIBRARIES m)
check_symbol_exists(pow "math.h" POW_FUNCTION_EXISTS)
if(POW_FUNCTION_EXISTS)
set(NEED_LINKING_AGAINST_LIBM True CACHE BOOL "" FORCE)
else()
message(FATAL_ERROR "Failed making the pow() function available")
endif()
endif()
# 库的安装命令
if(WIN32)
install(TARGETS wavelib DESTINATION lib)
install(TARGETS wavelib_static DESTINATION lib)
else()
install(TARGETS wavelib wavelib_static
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib)
endif()
if(NEED_LINKING_AGAINST_LIBM)
target_link_libraries(wavelib PUBLIC m)
endif()
set_property(TARGET wavelib PROPERTY FOLDER "lib")
target_include_directories(wavelib PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}../header)
install(TARGETS wavelib
EXPORT wavelib-targets
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
install(EXPORT wavelib-targets
FILE wavelib-config.cmake
NAMESPACE wavelib::
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/wavelib)
# 头文件安装命令
install(FILES ../header/wavelib.h DESTINATION include)
install(FILES ../header/wauxlib.h DESTINATION include)