我有一个这样的makefile结构:
all :
compile executable
clean :
rm -f *.o $(EXEC)
Run Code Online (Sandbox Code Playgroud)
我意识到在运行"make all"之前,我一直在我的终端中运行"make clean"然后"clear".在尝试筛选令人讨厌的C++编译错误之前,我喜欢有一个干净的终端.所以我尝试添加第三个目标:
fresh :
rm -f *.o $(EXEC)
clear
make all
Run Code Online (Sandbox Code Playgroud)
这是有效的,但这会运行make的第二个实例(我相信).有没有正确的方法来获得相同的功能而不运行第二个make实例?
C++有没有与python函数相同的东西os.path.join?基本上,我正在寻找一种结合文件路径的两个(或更多)部分的东西,这样您就不必担心确保两个部分完美地结合在一起.如果它在Qt中,那也很酷.
基本上我花了一个小时调试一些代码,至少部分代码是因为root + filename必须root/ + filename,并且我希望将来避免这种情况.
我正在写一个简短的shell脚本,它调用'make all'.这不是关键,但有没有办法可以压制这样的信息:如果是这样的话,"没有什么可以为所有人做的"?我希望找到一个make的标志来抑制它(不确定是否有),但是额外的一行或两行代码也可以.
仅供我使用bash.
编辑:为了更清楚,我只想宣传那些无所事事的消息.否则,我想显示输出.
很抱歉,如果已经被问到,但我找不到任何相关内容.
我正在从MySQL迁移到SQL Server我希望有一个.sql文件在数据库中创建数据库和表.在弄清楚语法扭结后,我已经让文件工作了(差不多).
如果我跑
IF db_id('dbname') IS NULL
CREATE DATABASE dbname
Run Code Online (Sandbox Code Playgroud)
它工作正常,如果我跑
CREATE TABLE dbname.dbo.TABLE1 (
);
...
CREATE TABLE dbname.dbo.TABLEN (
);
Run Code Online (Sandbox Code Playgroud)
它也工作正常.但是,如果我在同一个文件中运行它们,我会收到此错误
Database 'dbname' does not exist
Run Code Online (Sandbox Code Playgroud)
现在,CREATE TABLE语句不在我想要的IF语句中,但我似乎也找不到它的语法.({}不起作用?)
所以我的重要问题是,如何确保.sql文件中的特定命令在SQL Server中的另一个之前完成?
我的第二个问题是,如何在IF子句中包含多个指令?
为了清楚起见,我已将其运行到sqlcmd中.
这是我之前的一个问题(STL max_element的复杂性)的后续跟进.
我想基本上从一组中弹出最大元素,但我遇到了问题.
这大致是我的代码:
set<Object> objectSet;
Object pop_max_element() {
Object obj = *objectSet.rbegin();
set<Object>::iterator i = objectSet.end()--; //this seems terrible
objectSet.erase(i); //*** glibc detected *** free(): invalid pointer
return obj;
}
Run Code Online (Sandbox Code Playgroud)
早些时候我试过,objectSet.erase(objectSet.rbegin());但编译器抱怨没有匹配的功能(我猜它不喜欢reverse_iterator).我知道没有检查空集,但是当objectSet.size()>> 0时它失败了.
当我使用迭代器时,我有一个问题似乎是对const的某种隐式转换.我不确定哪些代码是相关的(如果我这样做,我可能不会问这个问题!)所以我会尽力说明我的问题.
typedef set<SmallObject> Container; //not const
void LargeObject::someFunction() { //not const
Container::iterator it; //not const
for (it = c.begin(); it != c.end(); ++it) { //assume c is a "Container"
(*it).smallObjectFunction(); //not a const function
}
}
Run Code Online (Sandbox Code Playgroud)
但是我总是得到以下错误:
error: passing 'const SmallObject' as 'this' argument of 'int SmallObject::smallObjectFunction()' discards qualifiers
Run Code Online (Sandbox Code Playgroud)
但是,如果我将它转换为((SmallObject)(*it).smallObjectFunction();然后我摆脱了错误消息.
我唯一可以想到的是,不知何故的定义
bool operator< (const SmallObject &a) const;
Run Code Online (Sandbox Code Playgroud)
以某种方式导致迭代器返回const对象.这里有任何帮助或解释吗?
我知道在MATLAB中,在1D情况下,您可以选择带索引的元素,例如a([1 5 3]),返回a的第1,第5和第3个元素.我有一个2D数组,并希望根据我拥有的一组元组选择单个元素.所以我可能想要a(1,3), a(1,4), a(2,5)等等.目前我拥有的最好diag(a(tuples(:,1), tuples(:,2)),但是对于较大的a和/或元组,这需要大量的内存.我是否必须将这些元组转换为线性索引,或者是否有更简洁的方法来实现我想要的东西而不需要占用太多内存?
所以根据这里的链接:http://www.cplusplus.com/reference/algorithm/max_element/,max_element函数是O(n),显然对于所有STL容器.它是否正确?不应该是一个集合的O(log n)(实现为二叉树)?
在一个有点相关的说明中,我总是使用cplusplus.com来回答更容易回答的问题,但我很好奇其他人对该网站的看法.