猿问

CakeKE_BUILD_TYPE未在CMakeLists.txt中使用

CakeKE_BUILD_TYPE未在CMakeLists.txt中使用

我在将我的默认构建配置设置为Release时遇到问题,在我的CMakeLists.txt文件中,我在文件顶部设置了CMAKE_BUILD_TYPE

#enable Release ALWAYS, configure varsset(CMAKE_BUILD_TYPE Release)set(EXECUTABLE_NAME "ParticleSimulator")set(VERSION_MAJOR 0)set(VERSION_MINOR 2)

但是在构建我的项目并打开解决方案时,我总是会看到调试模式,这与我在CMakeLists文件中指定的相反。我究竟做错了什么?我在那里看了一些其他的问题,但没有看到任何特定于这个问题的东西。

CMakeLists.txt的要点


慕哥9229398
浏览 1330回答 2
2回答

忽然笑

有两种类型的发生器:单配置和多配置。单一配置类似Make的生成器:Unix Makefiles,NMake Makefiles,MinGW Makefiles,......您在生成步骤上设置配置类型:cmake&nbsp;-H.&nbsp;-B_builds/Debug&nbsp;-DCMAKE_BUILD_TYPE=Debug&nbsp;"-GUnix&nbsp;Makefiles"在这种情况下,构建步骤始终是Debug:>&nbsp;cmake&nbsp;--build&nbsp;_builds/Debug&nbsp;&nbsp;&nbsp;&nbsp;/usr/bin/c++&nbsp;-g&nbsp;...>&nbsp;cmake&nbsp;--build&nbsp;_builds/Debug&nbsp;--config&nbsp;Debug&nbsp;#&nbsp;`--config`&nbsp;ignored/usr/bin/c++&nbsp;-g&nbsp;...>&nbsp;cmake&nbsp;--build&nbsp;_builds/Debug&nbsp;--config&nbsp;Release&nbsp;#&nbsp;yep,&nbsp;ignored/usr/bin/c++&nbsp;-g&nbsp;...多配置IDE生成器:Visual Studio,XcodeCMAKE_BUILD_TYPE&nbsp;on generate步骤被忽略,两者:>&nbsp;cmake&nbsp;-H.&nbsp;-B_builds&nbsp;-DCMAKE_BUILD_TYPE=Debug&nbsp;"-GVisual&nbsp;Studio&nbsp;12&nbsp;2013&nbsp;Win64"和>&nbsp;cmake&nbsp;-H.&nbsp;-B_builds&nbsp;-DCMAKE_BUILD_TYPE=Release&nbsp;"-GVisual&nbsp;Studio&nbsp;12&nbsp;2013&nbsp;Win64"会产生同样的效果:这是因为所有配置都是内部的(即_builds/msvc-opaque/Release和/&nbsp;_builds/msvc-opaque/Debug或其他,无关紧要)。您可以使用--config选项切换:>&nbsp;cmake&nbsp;--build&nbsp;_builds&nbsp;--config&nbsp;Releasecl&nbsp;/O2&nbsp;...>&nbsp;cmake&nbsp;--build&nbsp;_builds&nbsp;--config&nbsp;Debugcl&nbsp;/Od&nbsp;...控制 (?)是的你可以。只需定义CMAKE_CONFIGURATION_TYPES:#&nbsp;Somewhere&nbsp;in&nbsp;CMakeLists.txtmessage("Generated&nbsp;with&nbsp;config&nbsp;types:&nbsp;${CMAKE_CONFIGURATION_TYPES}")默认输出:--&nbsp;Detecting&nbsp;CXX&nbsp;compiler&nbsp;ABI&nbsp;info&nbsp;-&nbsp;doneGenerated&nbsp;with&nbsp;config&nbsp;types:&nbsp;Debug;Release;MinSizeRel;RelWithDebInfo--&nbsp;Configuring&nbsp;done重写它:>&nbsp;cmake&nbsp;-H.&nbsp;-B_builds&nbsp;-DCMAKE_CONFIGURATION_TYPES="Debug;Release"&nbsp;"-GVisual&nbsp;Studio&nbsp;12&nbsp;2013&nbsp;Win64"--&nbsp;Detecting&nbsp;CXX&nbsp;compiler&nbsp;ABI&nbsp;info&nbsp;-&nbsp;doneGenerated&nbsp;with&nbsp;config&nbsp;types:&nbsp;Debug;Release--&nbsp;Configuring&nbsp;done您甚至可以定义自己的配置类型:>&nbsp;cmake&nbsp;-H.&nbsp;-B_builds&nbsp;-DCMAKE_CONFIGURATION_TYPES="Debug;MyRelease"&nbsp;-DCMAKE_CXX_FLAGS_MYRELEASE="/My-Rel-flag"&nbsp;-DCMAKE_EXE_LINKER_FLAGS_MYRELEASE="/My-Linker-flags"&nbsp;"-GVisual&nbsp;Studio&nbsp;12&nbsp;2013&nbsp;Win64"并建立:cmake --build _builds --config MyRelease乱 (?)如果你知道诀窍就一点都不:)这是如何在脚本/ CI服务器/文档的构建指令等中构建/测试配置:>&nbsp;CONFIG=Debug>&nbsp;cmake&nbsp;-H.&nbsp;-B_builds&nbsp;"-DCMAKE_BUILD_TYPE=${CONFIG}"&nbsp;#&nbsp;Set&nbsp;Debug&nbsp;to&nbsp;Makefile,&nbsp;ignored&nbsp;by&nbsp;IDE>&nbsp;cmake&nbsp;--build&nbsp;_builds&nbsp;--config&nbsp;"${CONFIG}"&nbsp;#&nbsp;Build&nbsp;Debug&nbsp;in&nbsp;IDE,&nbsp;ignored&nbsp;by&nbsp;Makefile>&nbsp;(cd&nbsp;_builds&nbsp;&&&nbsp;ctest&nbsp;-VV&nbsp;-C&nbsp;"${CONFIG}")&nbsp;#&nbsp;Test&nbsp;Debug&nbsp;in&nbsp;IDE,&nbsp;ignored&nbsp;by&nbsp;Makefile糟糕的模式if(CMAKE_BUILD_TYPE&nbsp;STREQUAL&nbsp;Debug)&nbsp;#&nbsp;Burn&nbsp;it&nbsp;with&nbsp;fire!!!set(CMAKE_BUILD_TYPE&nbsp;MySuperRelease)&nbsp;#&nbsp;Be&nbsp;ready&nbsp;to&nbsp;catch&nbsp;a&nbsp;bug&nbsp;from&nbsp;IDE&nbsp;user...好的set(CMAKE_CXX_FLAGS_DEBUG&nbsp;"${CMAKE_CXX_FLAGS_DEBUG}&nbsp;--my-debug-flags")工作得很好。target_compile_definitions(MyTarget&nbsp;PUBLIC&nbsp;"$<$<CONFIG:Debug>:MYDEBUG_MACRO>")谢谢!:)你为一个程序员节省了一天。使用Makefile为我工作,我很高兴...从一个漂亮的书中的一些报价好人,你可能知道(重点煤矿):你为什么要打扰?在各种系统上编程或使用各种编译器的人非常关心,因为如果他们不这样做,他们就不得不浪费时间寻找和修复模糊的错误。声称他们不关心可移植性的人通常会这样做,因为他们只使用一个系统,并且觉得他们能够承担“我的编译器实现的语言”的态度。这是一个狭隘和短视的视图。如果您的程序成功,则可能会被移植,因此有人必须找到并修复与实现相关的功能相关的问题。此外,程序通常需要与同一系统的其他编译器一起编译,甚至您喜欢的编译器的未来版本可能会做一些与当前版本不同的东西。在编写程序时,了解并限制实现依赖性的影响要比在之后尝试解决混乱更容易。

慕妹3146593

发生的一种可能性是其中一个子模块已将CMAKE_BUILD_TYPE值设置在缓存中,IE:SET(CMAKE_BUILD_TYPE&nbsp;Debug&nbsp;CACHE)意味着该值将从该点永久更新到配置运行结束。跟踪此值发生变化的违规位置的一个好方法是使用cmake的variable_watch。在主CMakelists.txt文件中添加以下行variable_watch(CMAKE_BUILD_TYPE)每次访问此变量时,这将打印到标准错误。要将其记录到日志文件中,请执行以下操作:cmake&nbsp;<your&nbsp;options>&nbsp;2>variable_watch.log你可能会看到类似的东西:CMake调试日志在<...> / CMakeLists.txt:184(add_library):使用值为“Debug”的READ_ACCESS访问变量“CMAKE_BUILD_TYPE”。然后,您可能会看到首次更改CMAKE_BUILD_TYPE的点。从这里你将更接近追踪违规的cmake线。
随时随地看视频慕课网APP
我要回答