如何让CMake安装调试Visual Studio生成的DLL文件和EXE文件所需的配套PDB文件?
这是一个示例数据框:
import pandas as pd
NaN = float('nan')
ID = [1, 2, 3, 4, 5, 6, 7]
A = [NaN, NaN, NaN, 0.1, 0.1, 0.1, 0.1]
B = [0.2, NaN, 0.2, 0.2, 0.2, NaN, NaN]
C = [NaN, 0.5, 0.5, NaN, 0.5, 0.5, NaN]
columns = {'A':A, 'B':B, 'C':C}
df = pd.DataFrame(columns, index=ID)
df.index.name = 'ID'
print(df)
A B C
ID
1 NaN 0.2 NaN
2 NaN NaN 0.5
3 NaN 0.2 0.5
4 0.1 0.2 NaN
5 0.1 0.2 …Run Code Online (Sandbox Code Playgroud) 我正在使用cmake 2.8.12.2.我已设置CMAKE_DEBUG_POSTFIX,它会自动与add_library命令一起使用.但它不会自动与add_executable命令一起使用.我发现我可以设置DEBUG_POSTFIXtarget属性以将调试后缀添加到可执行文件名中,但这需要使用附加命令.
add_executable(${PROJECT_NAME} ${SOURCE_FILES})
set_target_properties(${PROJECT_NAME} PROPERTIES DEBUG_POSTFIX ${CMAKE_DEBUG_POSTFIX})
Run Code Online (Sandbox Code Playgroud)
第二个命令是否明确设置了DEBUG_POSTFIX所需的目标属性,还是有更简单的方法?
我添加了一条\dir注释,为目录提供了附加文档.但我无法使用我所知道的任何doxygen链接技术链接到该目录文档.我的问题是:如何正确链接到目录的文档?
下面是我尝试过的片段.我收到两个警告,没有生成链接.doxygen手册的自动链接部分讨论了与其他成员的链接,但没有提到dirs的链接.是否支持链接到目录文档?如果是这样,我做错了什么或这是一个错误?(我现在正在使用1.8.10.1.8.9.1表现相同.)
这是我尝试过的.我已经记录了使用目录
/// \dir cpp/vtutil
///
/// \brief Brief description of the dir cpp/vtutil goes here
///
/// \details A more detailed description goes here.
///
Run Code Online (Sandbox Code Playgroud)
我使用引用目录
/// \file
/// \brief Implements the vt application class.
///
/// This file is in the \ref cpp/vtutil directory.
/// What about #cpp/vtutil
Run Code Online (Sandbox Code Playgroud)
以下是警告:
warning : unable to resolve reference to `cpp/vtutil' for \ref command
warning : explicit link request to 'cpp' could not be resolved
Run Code Online (Sandbox Code Playgroud)
该文档用于目录,但似乎没有办法引用它.我真诚地感谢任何帮助.
记录项目CMakeLists.txt文件和本地项目.cmake文件的好方法是什么?有一个两年前的问题/答案记录CMake脚本,我基本上再次在这里问.答案包含声明
目前,CMake 3.0正在开发中,它将获得基于Sphinx和reStructuredText的新文档系统.我想这会带来记录模块的新方法.
我查看了cmake开发人员文档,但是这个新的文档系统似乎是针对cmake本身的文档.我不知道如何使用它来记录我的用户定义的项目CMakeLists.txt文件或本地.cmake文件.
我希望,因为cmake项目内部有各种sphinx指令和角色,作为用户,我可以利用sphinx的这种内部用法.我希望能够在我的文件和本地文件中有一些标记,而无需重新发明轮子.其他项目也有相关的努力.例如,ROS catkin项目似乎提供了我见过的最完整的方法,但对于非ROS项目来说,这是非常重要的,不容易使用.(例如,查看他们提取的cmake api页面.)最简单的是sphinx-contrib cmakedomain,但它依赖于单独的第一个源doc而不是带有标记注释的autodoc方法.CMakeLists.txt.cmake
也许这是cmake列表的问题,但我希望有人监控StackOverflow.
我最近写了一些我认为还可以的代码,但一位同事说它导致我们的应用程序随机崩溃。违规代码正在写入未打开的 ofstream。我的问题是:写入尚未打开的 ofstream 是否可以?当一个类的初始化不会打开它的 ofstream 来记录调试信息时,就会出现这种情况。但是后续的方法仍然会使用未打开的 ofstream。下面是一个例子:
class A {
public:
A(const std::string& fname) {
if (!fname.empty()) {
m_debug_log.open(fname.c_str());
}
}
void DoSomething() {
m_debug_log << "doing something useful now" << std::endl;
}
private:
std::ofstream m_debug_log;
};
Run Code Online (Sandbox Code Playgroud)
我的同事说他通过m_debug_log对 ofstream 进行有效性检查来包装所有输出操作来阻止随机崩溃。因此输出操作仅在m_debug_log有效输出流时执行。
void DoSomething() {
if (m_debug_log)
m_debug_log << "doing something useful now" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
当然,只有在流有效时才写入流最有意义。但我从没想过写入未打开的 ofstream 会导致正确性问题。(是的,它效率低下,但当时编码速度是我的首要任务。)
我迅速搜索,但没有找到任何确定的内容。特别是在写入未初始化的 ofstream 时,我没有看到任何关于未定义行为的明确信息。最初的实施应该是正确的吗?我的问题是一般性问题,而不是关于特定实现的问题。值得一提的是,我经常使用 VS 2010、VS 2013、Ubuntu 12.04 和 Centos 6.3,并且在初始测试中没有发现任何问题。只有在长时间运行时才会发生崩溃。
以下代码:
#include <cstdint>
#include <vector>
#include <boost/range/irange.hpp>
int main() {
int64_t first = 0, last = 10;
std::vector<double> result = boost::copy_range<std::vector<double>>(boost::irange(first, last));
}
Run Code Online (Sandbox Code Playgroud)
生成警告(以及100多行模板化调用堆栈跟踪):
1>C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\xmemory0(600):
warning C4244: 'initializing' : conversion from 'unsigned __int64' to 'double', possible loss of data
Run Code Online (Sandbox Code Playgroud)
我想告诉编译器我不关心我int64_t的转换double.我也不想使用32位的int.我通常会用它static_cast<double>(my64BitInt)来解决这个问题,但这不适用于范围.现在我正在使用编译器编译指示来抑制警告但这并不理想.
编辑:这是一个带有完整编译器输出的pastebin.
我不明白我的CMakeLists.txt中的source_group命令.当我这样做时,它有效:
file(GLOB INPUT_HEAD KeyBoard.h Mouse.h)
source_group("Header Files\\Input" FILES ${INPUT_HEAD})
Run Code Online (Sandbox Code Playgroud)
但这不起作用:
file(GLOB SHADERS ../Shaders/*.txt)
source_group("Source Files\\Shaders" FILES ${SHADERS})
Run Code Online (Sandbox Code Playgroud)
关于如何解决这个问题的任何建议?(我已阅读此命令的文档,我不明白为什么这不起作用)
我一直在研究Boost.Log一段时间,我相信现在是我将代码库从log4cxx转换为Boost.Log的时候了.我相信Boost.Log的设计和实现将显着改善我的代码维护和使用.我知道Boost.Log FAQ有一个页面说
对于分层记录器,当前库设计中不需要此功能.它在log4j中提供的主要好处之一是确定日志记录最终的appender(接收器,就此库而言).该库通过过滤实现相同的结果.
我理解概念等价而不是试图将Boost.Log变成log4j/log4cxx.相反,我的问题是:如何使用Boost.Log来获得与我目前在log4cxx中使用的功能相同的功能?特别是,我想为日志源或通道层次结构中的特定节点设置严重性阈值和接收器.例如,我有按日期组织的日志源,libA.moduleB.componentC.logD其中层次结构中的级别由点分隔..使用log4cxx,可以使用libA更具体的记录器设置INFO 的总阈值,libA.moduleB阈值为DEBUG.
libA.threshold=INFO
libA.moduleB.threshold=DEBUG
Run Code Online (Sandbox Code Playgroud)
类似地,可以将接收器附加到层次结构中的任意节点.
我相信使用Boost.Log可以实现类似的功能,但我需要有关如何实际实现此功能的帮助/指导.另外,我确信其他想要从其他框架过渡到Boost.Log的人会有同样的问题.
我真诚地感谢您的评论.