小编Mey*_*sam的帖子

CMake:add_custom_command与PRE_BUILD不起作用

在下面的CMakeLists.txt文件中,虽然我已经设置了add_custom_commandPRE_BUILD选项的命令,但在创建主可执行文件之前并不总是执行自定义命令:

cmake_minimum_required(VERSION 2.8)
project(VersioningTest)

set(MAJOR 1)
set(MINOR 0)
set(PATCH 0)

set(PRODUCT App-${MAJOR}-${MINOR}-${PATCH})

ADD_EXECUTABLE(${PRODUCT}
                main.cpp
                Engine.cpp)

add_custom_command(TARGET ${PRODUCT} PRE_BUILD
                COMMAND ${CMAKE_COMMAND}
                -DMAJOR=${MAJOR}
                -DMINOR=${MINOR}
                -DPATCH=${PATCH}
                -P ${CMAKE_SOURCE_DIR}/SetVersion.cmake
                WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
                COMMENT "setting version...")
Run Code Online (Sandbox Code Playgroud)

所以,我决定更换add_custom_commandadd_custom_targetadd_dependencies:

add_custom_target(SetVersion
                COMMAND ${CMAKE_COMMAND}
                -DMAJOR=${MAJOR}
                -DMINOR=${MINOR}
                -DPATCH=${PATCH}
                -P ${CMAKE_SOURCE_DIR}/SetVersion.cmake
                WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
                COMMENT "setting version...")

add_dependencies(${PRODUCT} SetVersion)
Run Code Online (Sandbox Code Playgroud)

它奏效了.现在SetVersion.cmake每次执行文件都在执行主可执行文件之前执行.这有什么错add_custom_command我的CMake的文件?

SetVersion.cmake文件内容:

EXECUTE_PROCESS(
    COMMAND svn info ${CMAKE_SOURCE_DIR}
    COMMAND grep Revision
    OUTPUT_VARIABLE REVISION
    OUTPUT_STRIP_TRAILING_WHITESPACE
)

EXECUTE_PROCESS(
     COMMAND svn diff ${CMAKE_SOURCE_DIR} …
Run Code Online (Sandbox Code Playgroud)

c++ linux cmake add-custom-command

2
推荐指数
1
解决办法
1432
查看次数

如何使用javascript下载整个网页的HTML?

是否可以HTML使用JavaScript给定的URL 下载整个网页?我想要做的是开发一个Firefox附加组件来下载浏览器当前页面源中找到的所有链接的内容.

更新:URL位于同一个域中

html javascript url download firefox-addon

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

0x88文字在c ++中转换为什么?

我认为一个字面意思0x88会被投射到signed int.但是以下程序的输出与我最初的假设不同.有人可以对此有所了解并解释发生了什么吗?

printf("%hd, %hu\n", 0x88); // output: 136 (10001000), 65416 (11111111 10001000)
Run Code Online (Sandbox Code Playgroud)

如果我的假设是正确的,那么0x88首先会被投入signed int并成为:

00000000 00000000 00000000 10001000
Run Code Online (Sandbox Code Playgroud)

使用时打印%hd,会signed short产生以下效果:

00000000 10001000
Run Code Online (Sandbox Code Playgroud)

然后用%hd它来打印它unsigned short再次产生这个:

00000000 10001000
Run Code Online (Sandbox Code Playgroud)

我预计两个printfs 的输出都是136.

更新:其中一个参数printf错误地丢失了.它应该像你们所指出的那样:

printf("%hd, %hu\n", 0x88, 0x88);
Run Code Online (Sandbox Code Playgroud)

c++ casting literals

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

来自c ++的奇怪代码段

从其他帖子中读取代码,我看到的是这样的东西.

struct Foo {
  Foo() : mem(0) {}
  int mem;
};
Run Code Online (Sandbox Code Playgroud)

mem(0){}在这种情况下做了什么,特别是关于花括号?我以前从未见过这个,也不知道我会在哪里找到这个.我知道mem(0)会将mem初始化为0,但为什么{}?

谢谢.

c++ constructor initializer-list

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

参数中的指针和引用

我在几个树代码中看到,树类的一个函数同时具有*和&与节点,例如在BST中插入一个节点,函数是这样的

insertnode(node * &t,string value)
{
t = new node; t-> val = value 
// code to find right place in BST
}
Run Code Online (Sandbox Code Playgroud)

我想知道为什么我们通常引用指针,特别是这种情况.还请提及是否还有其他任何情况,谢谢

而不是发布另一个问题.有人也可以指出对象类的使用吗?我的意思是使用对象类的实例它是否分配了所有子类的所有内存?即int float等.

c c++ pointers pass-by-reference

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

将原始指针分配给auto_ptr

我正在阅读一篇关于有效使用的文章auto_ptr.在那里,以下代码被建议为正确的代码段:

// Example 10(c): Correct (finally!)
//
auto_ptr<String> f()
{
  auto_ptr<String> result = new String;
  *result = "some value";
  cout << "some output";
  return result;  // rely on transfer of ownership;
                  // this can't throw
}
Run Code Online (Sandbox Code Playgroud)

但据我所知,赋值运算符auto_ptr只接受另一个auto_ptr作为rhs- 以避免意外误用.那么,下面的一行是文章中的拼写错误,还是它真的能够起作用?

auto_ptr<String> result = new String;
Run Code Online (Sandbox Code Playgroud)

c++ smart-pointers auto-ptr

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

从基类到不同派生类的多重继承转换

我有以下几组课程:

在此输入图像描述

以下代码:

A* a;
if(condition)
{
    a = new E();
}
else
{
    a = new D();
}
Run Code Online (Sandbox Code Playgroud)

现在假设有这样的功能F::foo(),为了调用它,我必须转换aE*或者D*:

if(condition)
{
    ((E*)a)->foo();
}
else
{
    ((D*)a)->foo();
}
Run Code Online (Sandbox Code Playgroud)

据我所知,铸造aF*以打电话F::foo,因为是非法a的类型的A*; 对我来说,在打电话之前检查一下情况foo,听起来像是一个设计问题.有人可以就如何改进这个类层次结构提出一些建议吗?

ps使用此工具绘制图表.

c++ casting multiple-inheritance

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

为什么长长的值不能正确打印?

为什么在我的下面的代码片段中没有按照我的预期打印长long值?

#include <stdio.h>

int main()
{
    int x = 1363177921;
    long long unsigned y = x * 1000000;
    printf("y: %llu\n", y); // Why is 1363177921000000 not printed?
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ printf long-integer

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

CMake:如何在make install之前执行命令?

这是我安装配置文件的方式:

file(GLOB ConfigFiles  ${CMAKE_CURRENT_SOURCE_DIR}/configs/*.xml
                            ${CMAKE_CURRENT_SOURCE_DIR}/configs/*.xsd
                            ${CMAKE_CURRENT_SOURCE_DIR}/configs/*.conf)

install(FILES ${ConfigFiles} DESTINATION ${INSTDIR})
Run Code Online (Sandbox Code Playgroud)

但我需要在安装之前转换其中一个xml文件.有一个可执行文件可以为我做这个工作:

./Convertor a.xml a-converted.xml

如何在安装之前自动转换xml文件?它应该是一个自定义命令或目标,安装依赖于它,我只是不知道如何使install命令依赖它.任何意见,将不胜感激!

linux install cmake

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

CMake:无论如何强制链接库?

无论如何都要强制再次链接库.当某些库已更改但当前项目的任何源代码没有变化时,这将非常有用.我正在寻找这样的东西:

建立链接

c++ linux linker cmake

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