CMake for Visual Studio

本文详细介绍了如何使用CMake构建VisualStudio项目,包括PropertySheet的配置、CMakeLists.txt的编写以及VisualStudio的构建设置。通过示例文件展示了如何设置头文件路径、库文件路径、额外依赖项,并提供了用于VisualStudio的自定义PropertySheet。同时,还给出了用于创建和配置VisualStudio构建系统的批处理脚本config.bat。

Property Sheet

example main.props, 在此文件 设置工程,方便分享

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <!-- 添加其他props文件 -->
  <ImportGroup Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>

  <PropertyGroup Label="UserMacros" />

  <PropertyGroup>
    <IncludePath> 
      <!-- 头文件路径 -->
    </IncludePath>
    <LibraryPath>
      <!-- 库文件路径 -->
      $(LibraryPath)
    </LibraryPath>
  </PropertyGroup>

  <ItemDefinitionGroup>
    <Link>
      <AdditionalDependencies>
        <!-- 库文件 -->
        %(AdditionalDependencies)
      </AdditionalDependencies>
      <AdditionalLibraryDirectories>
        <!-- 库文件路径 -->
      </AdditionalLibraryDirectories>
    </Link>
  </ItemDefinitionGroup>

  <ItemGroup />
</Project>    

CMakeLists.txt

example file

cmake_minimum_required(VERSION 3.0.0)

project(ProjName C CXX)

set(CMAKE_CONFIGURATION_TYPES "Release" CACHE STRING "Possible configurations" FORCE)
if (DEFINED CMAKE_BUILD_TYPE)
  set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS ${CMAKE_CONFIGURATION_TYPES})
endif()

if(MSVC)
  # Dynamically link the runtime libraries
  add_compile_options(
    $<$<CONFIG:>:/MD>
    $<$<CONFIG:Debug>:/MDd>
    $<$<CONFIG:Release>:/MD>
  )
	
  # 设置 VisualStudio 链接器->输入 链接库 “从父继承”
  set(CMAKE_CXX_STANDARD_LIBRARIES "$(CMAKE_CXX_STANDARD_LIBRARIES) %(AdditionalDependencies)")
endif()

set(CMAKE_INSTALL_PREFIX ${PROJECT_BINARY_DIR}/install)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE  ${PROJECT_BINARY_DIR}/lib/)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${PROJECT_BINARY_DIR}/bin/)

add_definitions(-w)
if(MSVC)
	#remove_definitions(/W3)
	#add_definitions(/W4)
	add_definitions(/wd4819)
	add_definitions(/wd4244)
	add_definitions(/wd4267)
	add_definitions(-DNOMINMAX)
	add_definitions(-D_CRT_SECURE_NO_WARNINGS)
endif()

include_directories()

# Visual Studio 分组
SOURCE_GROUP("" FILES ${Root_FILES})
SOURCE_GROUP(Dir\\SubDir FILES ${SubDir_FILES})

add_executable(foo)
target_link_libraries(foo ${LIBS})

# set_target_properties(foo PROPERTIES COMPILE_FLAGS "/Od")

# 添加 自定义PropertySheet文件 到 Visual Studio
set_target_properties(foo PROPERTIES VS_USER_PROPS "${PROJECT_SOURCE_DIR}/main.props")
# set_target_properties(foo PROPERTIES LINK_LIBRARIES "%(AdditionalDependencies)")

# Visual Studio 后期生成事件
ADD_CUSTOM_COMMAND(
  TARGET foo
  POST_BUILD
  COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_BINARY_DIR}
  COMMAND ${CMAKE_COMMAND} -E copy ${EXAMPLE_BIN_NAME} ${PROJECT_BINARY_DIR}/.
)

Building System for Visual Studio

example Windows Batch file config.bat

:: Create configuration for Visual Studio for Release and Debug modes.

@echo off

set ARCH=x64
set SRC_DIR=.\
set BUILD_DIR=%SRC_DIR%/build%ARCH%

echo.
echo PROCESSOR_ARCHITECTURE: %PROCESSOR_ARCHITECTURE%

echo.
echo ============= Checking for CMake ============
echo.

cmake --version
if not %errorlevel% == 0 (
    echo Error: CMake not found, please install it - see http://www.cmake.org/
    exit /B 1
)

echo.
echo ============= Creating build system for Visual Studio ============
echo.

if exist %BUILD_DIR% (
	echo delete
	rmdir /s %BUILD_DIR%
)

set MSVCDIR=%VS140COMNTOOLS%..\..\VC

:: Configure environment for Visual Studio
call "%MSVCDIR%\VCVARSALL.BAT" %ARCH%

set CMAKE_VS_GENERATOR=Visual Studio 14 2015 Win64
echo Using cmake generator %CMAKE_VS_GENERATOR%
set cmake_generator_options=-G "%CMAKE_VS_GENERATOR%"

if "%CMAKE_VS_GENERATOR_TOOLSET%" neq "" (
    echo Using cmake generator toolset %CMAKE_VS_GENERATOR_TOOLSET%
    set cmake_generator_options=%cmake_generator_options% -T "%CMAKE_VS_GENERATOR_TOOLSET%"
)

:: copy CMakeLists.txt ..

::set cmake_debug_options=--trace --debug-output
cmake -S %SRC_DIR% -B %BUILD_DIR% -Wno-dev %cmake_debug_options% %cmake_generator_options% || exit /B 1

echo.
echo ============= Building ============
echo.
echo To build:
echo - go to %BUILD_DIR%
echo - run 'cmake --build %BUILD_DIR% --parallel 3 --config Release(or Debug) [--target target_to_build]'
echo.

exit /B 0

Build

with cmake

from cmd with cmake --build

cmake --build %build-dir% --parallel 3 --config Release

with Visual Studio

打开 Visual Studio 工程 xxx.sln,生成解决方案

Ref

### 在 Visual Studio 中使用 CMake 脚本配置和生成项目 在 Visual Studio 中使用 CMake 脚本进行项目配置和生成,可以通过以下方式实现完整的流程。以下是关于如何在 Visual Studio 中使用 CMake 的详细说明。 #### 1. 配置 Linux 环境下的 CMake 项目 如果目标平台是 Linux,可以参考 Microsoft 官方文档中的指导[^1]。确保已安装适用于 Linux 的 Visual Studio 工具,并完成远程连接设置。配置过程中需要指定 CMakeLists.txt 文件的位置以及构建目录。通过 Visual Studio 的界面可以直接加载 CMakeLists.txt 并生成项目文件。 #### 2. 使用 CMake 扩展增强开发体验 对于更灵活的开发环境,可以结合 Visual Studio Code 和其扩展 `vs.language.cmake`[^2] 来编写和维护 CMake 脚本。虽然这是针对 Visual Studio Code 的工具,但在某些情况下也可以作为补充工具来验证 CMakeLists.txt 文件的正确性。 #### 3. 创建和配置本地 CMake 项目 在 Windows 环境下创建 CMake 项目时,可以通过以下步骤完成: - **创建项目**:选择 Visual Studio 中的“CMake”项目模板,命名项目并完成初始化[^3]。 - **编辑 CMakeLists.txt**:在项目的根目录中找到 `CMakeLists.txt` 文件,添加必要的配置内容。例如,定义最低版本要求和目标文件: ```cmake # 设置 CMake 最低版本要求 cmake_minimum_required(VERSION 3.10) # 定义项目名称 project(MyProject) # 添加可执行文件 add_executable(MyExecutable main.cpp) ``` - **添加注释**:为了提高代码可读性,可以在 CMakeLists.txt 中添加注释[^4]。例如: ```cmake # 这是一个示例注释 set(CMAKE_CXX_STANDARD 17) # 设置 C++ 标准为 C++17 ``` #### 4. 集成 vcpkg 包管理器 如果项目需要依赖外部库,可以集成 vcpkg 包管理器。具体步骤包括: - **安装 vcpkg**:确保已安装并配置好 vcpkg。 - **创建清单文件**:运行命令 `vcpkg new --application` 生成 `vcpkg.json` 文件[^3]。 - **配置环境变量**:将 vcpkg 的路径添加到系统的 `Path` 环境变量中。 #### 5. 构建和运行项目 完成上述配置后,Visual Studio 会自动根据 CMakeLists.txt 文件生成项目结构。用户可以直接通过 Visual Studio 的界面进行构建和调试。 --- ### 示例代码 以下是一个简单的 CMakeLists.txt 示例,用于配置一个包含单个源文件的项目: ```cmake # 设置 CMake 最低版本要求 cmake_minimum_required(VERSION 3.10) # 定义项目名称 project(SampleProject) # 设置 C++ 标准 set(CMAKE_CXX_STANDARD 17) # 添加可执行文件 add_executable(SampleExecutable main.cpp) ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晨光ABC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值