From 71d0a5e3aab1046855331eb72adb1d48d08a3eb3 Mon Sep 17 00:00:00 2001 From: Yi Zhang Date: Mon, 4 Jan 2021 20:57:28 +0800 Subject: [PATCH] update cmakelists --- CMakeLists.txt | 26 ++++++++++++++++++++++---- src/CMakeLists.txt | 44 ++++++++++++++++++++++---------------------- 2 files changed, 44 insertions(+), 26 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1fcda4f..03f67f4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,8 +2,28 @@ cmake_minimum_required(VERSION 3.15.2) # 设置工程名称和语言 project(LIBLBFGS VERSION 1.1.0) -# 设置安装地址 改用homebrew安装后这一句就不需要了 -set(CMAKE_INSTALL_PREFIX /usr/local) + +if(${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Linux") + message(STATUS "Platform: " ${CMAKE_HOST_SYSTEM_NAME}) + set(CMAKE_INSTALL_PREFIX "/usr/local") +elseif (${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Darwin") + message(STATUS "Platform: " ${CMAKE_HOST_SYSTEM_NAME}) + set(CMAKE_INSTALL_PREFIX "/usr/local") +elseif (${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Windows") + message(STATUS "Platform: " ${CMAKE_HOST_SYSTEM_NAME}) + set(CMAKE_C_COMPILER gcc) + set(CMAKE_CXX_COMPILER g++) + # CMake中的路径分隔符统一为UNIX格式 不需要使用反斜杠 否则会报警 + set(CMAKE_INSTALL_PREFIX "D:/Library") +else() + message(STATUS "Platform: " ${CMAKE_HOST_SYSTEM_NAME}) + set(CMAKE_INSTALL_PREFIX "/usr/local") +endif() +message(STATUS "Install prefix: " ${CMAKE_INSTALL_PREFIX}) + +# 添加源文件地址 +add_subdirectory(src/) + # 添加编译选项 option(HAVE_CONFIG_H "use config.h" ON) option(_MSC_VER "use __msc_ver" OFF) @@ -13,5 +33,3 @@ configure_file( "${PROJECT_SOURCE_DIR}/config.h.in" "${PROJECT_SOURCE_DIR}/src/lib/config.h" ) -# 添加源文件地址 -add_subdirectory(src/) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 64124ae..6197311 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -17,20 +17,27 @@ set_target_properties(lbfgs PROPERTIES VERSION 1.1 SOVERSION 1.1) # 设置库文件的输出地址 set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib) # 在LINUX中需添加math库 -message("-- Operating system: ${CMAKE_SYSTEM}") if(UNIX AND NOT APPLE) - message("-- Linking math library.") + message(STATUS "Linking math library.") find_library(MATH_LIBRARY m) find_library(MATH_A_LIBRARY libm.a) target_link_libraries(lbfgs PUBLIC ${MATH_LIBRARY}) target_link_libraries(lbfgs_static ${MATH_A_LIBRARY}) endif() + # 添加编译命令 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2") + # 库的安装命令 -install(TARGETS lbfgs lbfgs_static +if(WIN32) + install(TARGETS lbfgs DESTINATION lib) + install(TARGETS lbfgs_static DESTINATION lib) +else() + install(TARGETS lbfgs lbfgs_static LIBRARY DESTINATION lib ARCHIVE DESTINATION lib) +endif() # 头文件安装命令 install(FILES lib/lbfgs.h DESTINATION include) @@ -38,23 +45,16 @@ install(FILES lib/lbfgs.h DESTINATION include) # 设置可执行文件的输出地址 set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin) -# 添加可执行文件 命令行 -add_executable(lbfgs_sample sample/sample.c) -# 为安装文件添加动态库的搜索地址 -set_target_properties(lbfgs_sample PROPERTIES INSTALL_RPATH "/usr/local/lib") -# 链接动态库 -target_link_libraries(lbfgs_sample PUBLIC lbfgs) +# 例子的编译方法 +macro(add_sample name file) + # 添加可执行文件 命令行 + add_executable(${name} sample/${file}) + # 为安装文件添加动态库的搜索地址 在Windows下并没有什么用 直接忽略 + set_target_properties(${name} PROPERTIES INSTALL_RPATH "/usr/local/lib") + # 链接动态库 + target_link_libraries(${name} PUBLIC lbfgs) +endmacro() -# 添加可执行文件 命令行 -add_executable(lbfgs_sample2 sample/sample2.cpp) -# 为安装文件添加动态库的搜索地址 -set_target_properties(lbfgs_sample2 PROPERTIES INSTALL_RPATH "/usr/local/lib") -# 链接动态库 -target_link_libraries(lbfgs_sample2 PUBLIC lbfgs) - -# 添加可执行文件 命令行 -add_executable(lbfgs_sample3 sample/sample3.cpp) -# 为安装文件添加动态库的搜索地址 -set_target_properties(lbfgs_sample3 PROPERTIES INSTALL_RPATH "/usr/local/lib") -# 链接动态库 -target_link_libraries(lbfgs_sample3 PUBLIC lbfgs) \ No newline at end of file +add_sample(lbfgs_sample sample.c) +add_sample(lbfgs_sample2 sample2.cpp) +add_sample(lbfgs_sample3 sample3.cpp) \ No newline at end of file