Visual Studio 2017使用CMake,有两种方式:
一种是直接用VS创建CMake项目
另一种是使用cmake-gui创建sln,再用VS打开sln:
注意:如果Configure报错,一般是VS需要安装扩展等:
解决:CMake Error :Visual Studio 15 2017 -could not find any instance of Visual Studio. - ꧁执笔小白꧂ - 博客园
两种方式的区别:
第一种方式创建的项目,当没有添加项目所需要的的依赖库时,报错信息不明确:
第二种方式的报错信息中,能够看出具体的错误信息(推荐):
根据CMakeLists.txt生成*.sln
1. CMD命令行方式
# For x86
打开cmd:
cd [source dir]
mkdir build_win
cd build_win
cmake .. -G "Visual Studio 15 2017" #generators可通过cmake -help查看,默认应该是用最新版本_x64
打开*.sln
# For x64
cmake .. -G "Visual Studio 15 2017 Win64"
CMakeLists.txt:
cmake_minimum_required (VERSION 3.8)
#cmake_policy(SET CMP0128 OLD)
set(PROJECT_NAME TestProject)
#set(CMAKE_BUILD_TYPE "Debug")
set(CMAKE_BUILD_TYPE "Release")
IF (CMAKE_SYSTEM_NAME MATCHES "Linux")
# LINK_DIRECTORIES 必须放在 ADD_EXECUTABLE 之前
LINK_DIRECTORIES (../lib ../lib2)
SET(SRC_LIST
"Test.cpp"
"Test.h"
)
ELSEIF (CMAKE_SYSTEM_NAME MATCHES "Windows")
# LINK_DIRECTORIES 必须放在 ADD_EXECUTABLE 之前
LINK_DIRECTORIES (../xxx/lib/ ../lib2) #x86
SET(SRC_LIST
"Test.cpp"
"Test.h"
)
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/)
#SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/)
ENDIF()
# 将源代码添加到此项目的可执行文件。
ADD_EXECUTABLE (${PROJECT_NAME} ${SRC_LIST} )
option(GROUP_BY_EXPLORER ON) # 启用保留文件结构和资源管理器一样
set(PROJECT_MAJOR_VERSION 1)
set(PROJECT_MINOR_VERSION 0)
set(PROJECT_PATCH_VERSION 0)
set(PROJECT_VERSION ${PROJECT_MAJOR_VERSION}.${PROJECT_MINOR_VERSION}.${PROJECT_PATCH_VERSION})
IF (CMAKE_SYSTEM_NAME MATCHES "Linux")
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -g -ggdb -DDEBUG -DNO_LIMIT")
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -DNDEBUG")
ELSEIF (CMAKE_SYSTEM_NAME MATCHES "Windows")
add_definitions(-DUNICODE -D_UNICODE) # 设置字符集:Unicode
#add_definitions(-DCMAKE_CONFIGURATION_TYPES="Release;Debug")
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -g -ggdb -DDEBUG -DNO_LIMIT -MTd /ZI /Ob0 /Od /RTC1")
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -DNDEBUG -MT /ZI /Ob0 /Od /RTC1")
ENDIF()
SET(GCC_CXX_FLAGS, "-static-libgcc -static-libstdc++ -static -fPIC")
SET(CMAKE_CXX_FLAGS "-fPIC -lpthread -std=c++14 -Wall ")
SET(CMAKE_C_FLAGS "-fPIC -lpthread ")
# TODO: 如有需要,请添加测试并安装目标。
AUX_SOURCE_DIRECTORY(./ DIR_SRCS )
INCLUDE_DIRECTORIES(./)
MESSAGE(STATUS "operation system is ${CMAKE_SYSTEM}")
IF (CMAKE_SYSTEM_NAME MATCHES "Linux")
MESSAGE(STATUS "current platform: Linux ")
target_link_libraries(${PROJECT_NAME} libcurl.a)
target_link_libraries(${PROJECT_NAME} libssl.a)
target_link_libraries(${PROJECT_NAME} libcrypto.a -ldl)
ELSEIF (CMAKE_SYSTEM_NAME MATCHES "Windows")
MESSAGE(STATUS "current platform: Windows")
target_link_libraries(${PROJECT_NAME} ws2_32.lib)
target_link_libraries(${PROJECT_NAME} crypt32.lib)
#target_link_libraries(${PROJECT_NAME} Wldap32.lib)
target_link_libraries(${PROJECT_NAME} debug libcurld.lib) #debug lib
target_link_libraries(${PROJECT_NAME} optimized libcurl.lib) #other lib
target_link_libraries(${PROJECT_NAME} libcrypto.lib)
target_link_libraries(${PROJECT_NAME} libssl.lib)
#ELSEIF (CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
# MESSAGE(STATUS "current platform: FreeBSD")
ELSE ()
MESSAGE(STATUS "other platform: ${CMAKE_SYSTEM_NAME}")
ENDIF (CMAKE_SYSTEM_NAME MATCHES "Linux")
#ADD_DEFINITIONS(-D MIN_BUILD)