我有一个使用Makefile构建的C++库.直到最近,所有的源都在一个目录中,Makefile做了这样的事情
SOURCES = $(wildcard *.cpp)
工作得很好.
现在我添加了一些子目录中的源代码subdir.我知道我能做到这一点
SOURCES = $(wildcard *.cpp) $(wildcard subdir/*.cpp)
但我正在寻找一种避免subdir手动指定的方法,即wildcard查看子目录,或以某种方式生成子目录列表并使用多个wildcard函数扩展它.此时,具有非递归解决方案(即,仅扩展第一级)将没有问题.
我没有找到任何东西 - 我最好的猜测是find -type d用来列出子目录,但感觉就像一个黑客.有没有内置的方法来做到这一点?
我可以使用CreateProcess来启动EXE.我希望在内存缓冲区中包含EXE的内容,并在其上执行CreateProcess(或等效),而不必将其写入文件.有没有办法做到这一点?
背景故事:我们制作游戏.我们向经销商发送一个简单的EXE,然后使用他们喜欢的DRM将其包装并出售给他们的用户.曾经有过用户发现崩溃的情况.大多数崩溃需要5分钟才能解决,但补丁必须经过分销商,可能需要几天甚至几周.我不能将修补后的EXE发送给玩家,因为它没有经销商的DRM.我正在考虑将实际游戏EXE分发到加密数据文件中,这样包装(外部EXE)就会解密并启动真正的EXE.这样我就可以在不禁用DRM的情况下安全地分发修复程序.
我觉得这个问题很愚蠢,但在这里.我在Linux上使用gcc/g ++,因为我的安装是西班牙语(我的母语),gcc用西班牙语打印警告和错误.我宁愿用英文阅读它们有两个原因:
有帮助吗?我已经google了这个,但关于gcc和g ++的每个"语言"主题都是指编程语言,而不是人类语言.
我正在使用FQL从Facebook检索用户列表.为了保持一致性,我将结果作为JSON.这会导致问题 - 因为返回的JSON将用户ID编码为数字,json_decode()会将这些数字转换为浮点值,因为有些数字太大而无法放入int中; 当然,我需要这些ID作为字符串.
由于json_decode()在没有接受任何行为标志的情况下做了自己的事情,所以我很茫然.有关如何解决此问题的任何建议?
我遇到了一个有趣的问题.至少在Vista中,当桌面DPI设置未设置为100%时,getSystemMetrics(SM_CXSCREEN)返回不正确的值.例如,我在1366x768屏幕中尝试了150%,而getSystemMetrics()返回911而不是1366(和1366/1.5~911)
根据MSDN,getSystemMetrics(SM_CXSCREEN)返回像素,所以我认为这个值不受DPI设置的影响 - 但确实如此.那么有没有更安全的方法来找出真正的,未缩放的屏幕分辨率?
我的C++框架有Buttons.Button来自Control.因此,接受Control的函数可以将Button作为其参数.到现在为止还挺好.
我也有List <T>.但是,List <Button>不是从List <Control> 派生的,这意味着接受Controls列表的函数不能将Buttons列表作为其参数.这很不幸.
也许这是一个愚蠢的问题,但我不知道如何解决这个问题:(列表<按钮>应该来自List <Control >,但我没有看到一种方法来"自动"实现这一点.
我们正在寻找一种在构建中自动包含某种构建ID的方法.这需要是可移植的(VC++,Linux和Mac上的g ++)和自动.VC++是最重要的,因为在其他环境中我们使用自定义Python构建脚本,所以我可以做任何我想做的事情.
我们使用SVN,所以我们正在考虑使用svnversion的输出将修订写入标题并包含它.这有问题:如果我们把文件放在SVN中,它每次都会显示为修改,但它会是一个多余的提交,从某种意义上说会产生一个增加修订的无限循环.如果我们不将文件放在SVN中并仅将其创建为预构建步骤,则源将不完整,因为它们需要预构建步骤或Makefile来生成该文件.
我们也可以使用,__DATE__但我们不能保证在__DATE__修改其他文件的情况下编译使用的文件(即将其写入日志文件) - 除非我们"触摸"它,但是我们会导致项目总是过时的.我们可以将它作为预构建步骤触摸,因此只有在项目的其余部分已过时才会触及它,因此不会导致虚假编译,但如果VC++ 在预构建步骤之前计算依赖关系,则不会工作(文件__DATE__不会被编译)
任何有趣的想法?
我在新的OSX 10.4.11 + Xcode 2.5安装中遇到了一个非常奇怪的问题.我把它减少到一个最小的测试用例.这是test.cpp:
#include "macros.h"
int main (void)
{
return 1;
}
Run Code Online (Sandbox Code Playgroud)
这是macros.h:
#ifndef __JUST_TESTING__
#define __JUST_TESTING__
template<typename T> void swap (T& pT1, T& pT2)
{
T pTmp = pT1;
pT1 = pT2;
pT2 = pTmp;
}
#endif //__JUST_TESTING__
Run Code Online (Sandbox Code Playgroud)
如果两个文件都在同一目录中,则编译并正常工作.但是,如果我将macros.h放在/ usr/include/gfc2(它是我使用的自定义库的一部分)并更改test.cpp中的#include,则编译失败并显示以下错误:
/usr/include/gfc2/macros.h:4: error: template with C linkage
Run Code Online (Sandbox Code Playgroud)
我研究了这个错误,大多数评论都指向了一个"悬空的外部C",这似乎根本就不是这样.
我在这里完全失败了.g ++是否出于某种原因假设所有内容/usr/include/gfc2都是C,即使它包含在一个.cpp文件中,并不是说extern"C"在哪里?
有任何想法吗?
编辑:如果我使用完整路径,它确实编译#include,即#include "/usr/include/gfc2/macros.h"
EDIT2:它没有包含错误的标题.我已经验证了这一点使用cpp,g++ -E和重命名macros.h,以foobarmacros.h
我正在使用Vim写一些"页面"很重要的东西.页面是固定数量的行.
我:set colorcolumn用来突出右边距.是否有类似的内容突出显示文件的每个第N行?
我还在尝试调试一个非常偷偷摸摸的内存损坏问题.我遇到了一段代码,它在一个线程上分配内存并在另一个线程上删除它.
我有一种模糊的感觉,这是错的,但我不确定为什么.线程共享进程内存,对这些结构的访问受到互斥锁的保护,所以我认为一切都会起作用.但是,我有没有看到任何危险?
我在SQLite DB,INVITEM和SHOPITEM中有两个表.他们的共享属性是ItemId,我想执行INNER JOIN.这是查询:
SELECT INVITEM.CharId AS CharId,
INVITEM.ItemId AS ItemId
FROM (INVITEM as INVITEM
INNER JOIN SHOPITEM AS SHOPITEM
ON SHOPITEM.ItemId = INVITEM.ItemId)
WHERE ItemId = 3;
Run Code Online (Sandbox Code Playgroud)
SQLite不喜欢它:
SQL error: ambiguous column name: ItemId
Run Code Online (Sandbox Code Playgroud)
如果我写的话WHERE INVITEM.ItemId = 3,错误就会消失,但由于WHERE条件或多或少是用户指定的,所以我宁愿让它工作而不必指定表.NATURAL JOIN似乎解决了这个问题,但我不确定解决方案是否足够通用(即我可以在这种情况下使用,但我不确定我是否可以在每种情况下使用)
任何可以解决问题的替代SQL语法?
我在C++中使用伪接口,即纯抽象类.假设我有三个接口,IFoo,IBar和IQuux.我还有一个Fred类,它实现了所有这三个:
interface IFoo
{
void foo (void);
}
interface IBar
{
void bar (void);
}
interface IQuux
{
void quux (void);
}
class Fred : implements IFoo, IBar, IQuux
{
}
Run Code Online (Sandbox Code Playgroud)
我想声明一个接受任何实现IFoo和IBar的对象的方法 - 例如Fred会工作.我能想象的唯一编译时这样做的方法是定义一个实现它们的第三个接口IFooAndBar,并重新声明Fred:
interface IFooAndBar : extends IFoo, IBar
{
}
class Fred : implements IFooAndBar, IQuux
{
}
Run Code Online (Sandbox Code Playgroud)
现在我可以将我的方法声明为接收IFooAndBar*.到现在为止还挺好.
但是,如果我还想要一个接受IBar和IQuux的不同方法,会发生什么?我尝试声明一个新的接口IBarAndQuux并声明Fred继承两者:
class IFooAndBar : IFoo, IBar
{
};
class IBarAndQuux : IBar, IQuux
{
};
class Fred : IFooAndBar, IBarAndQuux
{
};
Run Code Online (Sandbox Code Playgroud)
当我将Fred作为IFooAndBar传递给方法时,这种方法有效; 但是,当我尝试直接调用Fred :: bar()时,gcc会抱怨:
error: request for …Run Code Online (Sandbox Code Playgroud) 好吧,我觉得愚蠢的问这个,但我花了整整一个下午试图搞清楚,没有成功.
在AS3中,我想将一个图像添加到库中(让我们称之为image.png)并仅使用代码对其进行实例化.
我成功地以这种方式实例化外部图像
var pLoad:Loader = new Loader();
pLoad.load(new URLRequest("image.png"));
addChild(pLoad);
Run Code Online (Sandbox Code Playgroud)
但无论我尝试什么,我都无法从库中加载图像.怎么做的?
旁白:我已经看过[embed]语法但理想情况下我想避免硬编码的图像名称,也就是说,我想选择一个图像,从而以编程方式生成图像名称.