可以在写完cmake_minimum_required和project之后马上设置MSVC运行库,这样会影响所有的生成目标: set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>") 对单个生成目标配置(2022/5/5 更新) 如果只想针对某个生成目标配置,可以这样: set_target_properties(你的生成目标 PROPERTIES MSVC_RUNTIME...
#判断编译器类型if(MSVC)#添加一个名为WITH_CRT_DLL的开关选项, #这样就可以在cmake-gui中或在命令行随时修改该开关选项。option(WITH_CRT_DLL"Link all libjpeg-turbo libraries and executables with the C run-time DLL (msvcr*.dll) instead of the static C run-time library (libcmt*.lib.) The de...
因为set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreaded) 在debug模式下也会生效啊 在使用动态库的时候也会生效啊 这样会拖慢编译速度 首先来解决在debug模式下也会静态编译runtime的问题,这个很简单,加if就好了 if(MSVC) if(CMAKE_BUILD_TYPESTREQUAL"Release") set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreaded) endif(...
这样的好处显而易见,不需要修改原项目的CMakeLists.txt,在外部就能控制/MD和/MT选项。 参考资料: 《How can I build my MSVC application with a static runtime?》《CMAKE_USER_MAKE_RULES_OVERRIDE》
cmake/toolchain.py @@ -98,6 +98,7 @@ class VSRuntimeBlock(Block): {% set genexpr.str = genexpr.str + '$<$<CONFIG:' + config + '>:' + value|string + '>' %} {% endfor %} + cmake_policy(SET CMP0091 NEW) set(CMAKE_MSVC_RUNTIME_LIBRARY "{{ genexpr.str }}") """)...
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>") endif() if(USE_CUDA) find_package(CUDAToolkit 11.0 REQUIRED) include_directories(${CUDAToolkit_INCLUDE_DIRS}) @@ -685,18 +690,6 @@ if(BUILD_CPP_TEST) file(GLOB CPP_TEST_SOURCES tests/cpp_tests/*.cpp) if(MSVC...
通过CMAKE_MSVC_RUNTIME_LIBRARY CMAKE最低版本需求3.15 必须要在project或者enable_lanuage之前,设置policy CMP0091为NEW才能生效 cmake_policy(SET CMP0091 NEW) project(XXX) if(MSVC) set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>") endif()编辑...
cmake:msvc编译第三方库时使用/MT静态库连接c/c++ runtime library 当时是为了解决用msvc编译时使用/MT连接static c library的问题。CMakeLists.txt中添加如下的代码,即可以将所有默认的C,CXX编译选项中的/MD替换成/MT. 代码语言:javascript 复制 if(MSVC)# Use thestaticClibraryforall build typesforeach(var...
CMAKE_EXPORT_COMPILE_COMMANDS:生成 compile_command.json(但 MSVC 环境不行,仅限于 makefile 与 ninja)。 C++ 标准 # 标准set(CMAKE_CXX_STANDARD20)# 设置为 on 时,如果编译器不支持指定的 C++ 标准,将报错并终止构建# 默认为 off,CMake 会使用尽量接近的标准set(CMAKE_CXX_STANDARD_REQUIREDON)# 禁用...
MSVC:如果编译器是 Window 上的 Visual C++ 之类的,那么 MSVC 为 True 。 ANDROID:如果目标系统是 Android ,那么 ANDROID 为 1 。 APPLE:如果目标系统是 APPLE ,那么 APPLE 为 1 。 有了这些常量做区分,就可以在一份 CMake 文件中编写不同平台的编译选项。 if(WIN32){ # do something }elseif(UNIX){...