CMake + Visual Studio 2017

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)

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值