我有一个静态库,我正在使用cmake进行编译。现在,当我在调试模式下进行编译时,我会生成pdb文件,但是在编译发布模式时,不会生成pdb文件。以下是cmake中的一段代码:
if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
set_target_properties(${PROJECT_NAME} PROPERTIES IMPORTED_CONFIGURATIONS "Debug")
set_target_properties(${PROJECT_NAME} PROPERTIES COMPILE_PDB_NAME ${PROJECT_NAME} COMPILE_PDB_OUTPUT_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/bin_debug" )
elseif("${CMAKE_BUILD_TYPE}" STREQUAL "Release")
set_target_properties(${PROJECT_NAME} PROPERTIES IMPORTED_CONFIGURATIONS "Release")
set_target_properties(${PROJECT_NAME} PROPERTIES COMPILE_PDB_NAME ${PROJECT_NAME} COMPILE_PDB_OUTPUT_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/bin_release" )
我想要pdb文件进行调试以及发布版本。那么,我怎么能拥有它?建议是真的需要。
答案 0 :(得分:2)
CMake会像Visual Studio一样为您的VS解决方案生成Release
配置。
但您可以将调试信息添加到其他配置中,例如/Zi
- 也可以使用例如/Z7
。 target_compile_options()
和generator experssions提供必要的target_compile_options(
${PROJECT_NAME}
PRIVATE
"$<$<AND:$<CXX_COMPILER_ID:MSVC>,$<CONFIG:RELEASE>>:/Zi>"
)
或project(...)
if (MSVC)
add_compile_options("/Zi")
endif()
命令:
[ {
"id" : 1,
"name" : "latha"
}, {
"id" : 2,
"name" : "kala"
}]
或者你可以说你希望它适用于所有配置和add_compile_options()
的所有目标(并且没有生成器表达式以提高可读性):
public class NSCLockData {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
<强>参考强>
答案 1 :(得分:0)
我没有使用过CMake,但看起来它会生成Visual Studio项目和解决方案文件,所以基于...
默认情况下,VS不会在发布配置中生成.pdb。为此,您需要在项目文件中使用一些属性。因此,您需要让CMake在它生成的.xxproj文件中输出类似于下面的内容:
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<DefineDebug>false</DefineDebug>
<Optimize>true</Optimize>
</PropertyGroup>
这些属性为您提供了另外一个发布/优化版本,唯一的区别是它也会生成.pdb。
PropertyGroup可能会因您的配置而异,但您需要有效(正在编译)的配置才能拥有子属性。