小编Cha*_*nce的帖子

在makefile中,目录名是伪目标还是"真实"目标?

根据我所读到的关于makefile的内容,假目标是任何与实际文件名不对应的目标.我的直觉说,作为目标的目录将被视为与文件相同.

为什么这很重要?我的makefile中有一个目录作为目标.当我把它作为我的主要可执行文件的先决条件时,总是会生成可执行文件,无论一切是否都是最新的.如果我把它作为先决条件,我的makefile足够聪明,知道什么时候需要构建,但我有一个问题,就是不知道是否需要创建目录.根据我所读到的关于make的内容,任何虚假目标都不是先决条件,因为make不知道它们是否是最新的,因此它们将始终重建相关目标.这是我的makefile的摘录.

$(EXEC_WITH_PATH): ${OBJ_DIR} $(DPEND) $(OBJS)
    @echo "--------------------------------------------";
    @echo "$(THIS_DIR)  $(MACHINE)";
    @echo "Linking Shared Library";
    @echo "ar -rc $(EXEC_WITH_PATH) INSERT::{OBJS}";
    ar -rc $(EXEC_WITH_PATH)  $(OBJS);
    @echo "--------------------------------------------";


# Make dirs for object code and links
${OBJ_DIR} :
        @if [ ! -d ${OBJ_DIR} ]; then \
                mkdir ${OBJ_DIR};    \
        fi;
Run Code Online (Sandbox Code Playgroud)

那么在这种情况下,是${OBJ_DIR},目录名称,虚假目标与否?

c++ linux makefile

19
推荐指数
2
解决办法
7454
查看次数

我可以阻止调试器进入Boost或STL头文件吗?

我正在使用Qt Creator和gdb在Linux平台上调试我的C++代码.每当我使用a boost::shared_ptr等时,调试器都会进入包含boost实现的头文件(即/ usr/include /boost/shared_ptr.hpp).我想在调试方面忽略这些文件,然后简单地跳过它们.我知道我可以在它到达其中一个文件时立即退出,但是如果不在每个调试会话中多次这样做,那么调试会更容易.

我正在使用gcc编译器(g++),在带有QtCreator 2.2的OpenSuSE Linux 11.2上运行(gdb用作调试器).

编辑添加:问题适用于Boost文件,但也可以应用于STL文件.

debugging gcc boost gdb qt-creator

19
推荐指数
2
解决办法
2001
查看次数

有没有图形方式来git stash/unstash个别文件?

我正在寻找一个用于存储和存储git弹出文件的GUI,能够对单个修改过的文件执行此操作.我知道有一个命令行方式可以这样做,在这里看到,但我正在寻找一种图形方式.我不太关心存储单个文件,而是关于弹出/应用的更多信息.我在Windows 7上运行.

git git-stash

9
推荐指数
3
解决办法
1万
查看次数

为什么此STL映射的条目未在GCC 4.5.1中初始化?

这是代码摘录.

std::map<double, double> temp;

temp[0] = .1;

cout << temp[1] << endl;
// result varies based on compiler
Run Code Online (Sandbox Code Playgroud)

我正在使用GCC版本4.4.1进行编译temp[1],正如我所料,我得到的值为0 .我的同事正在编译GCC 4.5.1版.在调试模式下(带有-g标志),他得到了1000.在编译发布模式(-O2标志)时,他得到了0.

我的想法是,这是通常在未初始化的变量中出现的问题类型,除了地图应该基于这个问题以及其他几个类似的问题调用其元素上的默认构造函数.

此外,Josuttis 的C++标准库说明了这一点

如果使用键作为索引,但尚未存在任何元素,则会自动将新元素插入到地图中.new元素的值由其类型的默认构造函数初始化.

为什么地图中的元素在调试模式下没有在GCC 4.5.1中初始化?我不理解别人对这种行为的正确看法吗?新元素的默认构造是否不一定是标准的一部分?或者这可能是编译器中的实际错误?

c++ gcc stl initialization map

7
推荐指数
1
解决办法
313
查看次数

编码数学算法 - 我应该在书中使用变量还是更具描述性的变量?

我正在维护一本来自书籍的数学算法的代码,并在评论中引用.如果变量名称描述变量代表什么,或者变量是否与书中的变量相匹配,是否更好?

举一个简单的例子,我可能会看到这段代码,它反映了书中的变量.

A_c = v*v/r
Run Code Online (Sandbox Code Playgroud)

我可以把它重写为

centripetal_acceleration = velocity*velocity/radius
Run Code Online (Sandbox Code Playgroud)

后者的优点是任何查看代码的人都可以理解它.然而,前者的优点是更容易将代码与书中的内容进行比较.我可能这样做是为了仔细检查算法的实现,或者我可能想要添加额外的计算.

也许我过度思考这个问题,应该简单地用注释来描述变量是什么.我倾向于支持自我记录代码(使用描述性变量名而不是添加注释来描述它们是什么),但也许这是一个注释非常有用的情况.

我知道这个问题可能是主观的,但我想知道是否有人有任何指导原则来做出决定,或者有编码数学算法编码指南的链接.

math coding-style naming-conventions

5
推荐指数
1
解决办法
917
查看次数

STL是否首先设置相等运算符检查大小?

当我使用==或!=运算符来比较两个集合时,该运算符是否实际上比较了两个集合的大小?我想知道我是否需要首先手动比较两种尺寸以使其更有效率,或者如果我实际上要降低其效率.我知道运算符将检查大小的相等和不等式,我只是不知道它是否会首先执行此操作.

bool checkEqualTo( const set<int> & set1, const set<int> & set2 )
{
    // Should I include comparison of sizes first?
    if ( set1.size() != set2.size() )
    {
       return false;
    }
    if ( set1 != set2 )
    { 
        return false;
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)

c++ performance stl comparator

3
推荐指数
1
解决办法
2056
查看次数

在git中,在提交ID之后命名分支是否有任何问题?

我经常遇到一个独立的头状态.我想创建一个脚本,当我运行时,会自动创建一个我所在的分支,并在当前提交ID之后命名它.似乎git会让我这样做,但是一个具有相同名称的分支和提交可能导致任何git命令的任何可能的歧义或副作用?

git git-branch

0
推荐指数
1
解决办法
56
查看次数