Cmake显然忽略了CMAKE_BUILD_TYPE?

时间:2015-06-10 17:00:17

标签: cmake

所以我正在使用CMake进行项目。 它由一组链接到一个可执行文件的共享库组成。所有都在项目中生成(没有外部目标)。每个子项目都在其自己的目录中,并具有自己的cmakelists文件。

所以我做了一个out-of-source构建,注意将CMAKE_BUILD_TYPE设置为Debug,然后运行cmake,然后make。我在使用MSYS / MINGW的Windows机器上使用GNU make 3.81,GCC 4.8.1,binutils 2.23.2和CMake 3.2.3。

问题是,当我在gdb(版本7.6)中加载此可执行文件时,在其中一个共享库的函数上放置一个断点,然后尝试单步执行,gdb跳过整个函数说它没有行号码信息。

根据我的理解,行号信息是调试信息的一部分,所以我希望在编译过程中生成它(根据CMAKE_BUILD_TYPE)它没有,所以我想知道我是怎么做的可以让CMake正确生成这个行号信息(也就是说,无需在cmake文件中手动添加特定于编译器的选项,但如果它是唯一的解决方案,我会采用它)。

我已尝试在命令行中设置CMAKE_BUILD_TYPE(在调用cmake实用程序时),在cmakelists中,甚至修改CMakeCache.txt,并从空目录重新启动构建但没有成功。然后我通过使用MESSAGE命令打印它的值确保CMAKE_BUILD_TYPE被有效地设置为Debug,并且它被正确设置为Debug。然后我执行'make VERBOSE = 1'来查看是否添加了正确的编译器选项,并发现它正确使用了“-g”选项(虽然我希望-ggdb,但稍后会有更多内容)。 cmake文档和谷歌没有给我任何答案。 我的假设是-g选项只生成基本的调试信息(例如函数和它们的内存地址之间的映射,以及如何访问它们的参数),而-ggdb将以gdb特定的格式生成更详细的调试信息,包括所说的行号信息),但令人不安的事实是,当在gdb中运行可执行文件时,可执行文件中定义的函数确实有行号信息,只有共享库没有,因此我感到困惑。

0 个答案:

没有答案