小编J.B*_*own的帖子

覆盖单个文件的编译标志

我想使用一组全局标志来编译项目,这意味着在我指定的顶级CMakeLists.txt文件中:

ADD_DEFINITIONS ( -Wall -Weffc++ -pedantic -std=c++0x )
Run Code Online (Sandbox Code Playgroud)

但是,对于一个子目录中的特定文件(假设为"foo.cpp"),我想将编译标志切换为不应用-Weffc ++(包含的商业库我无法更改).为了简化只使用-Wall的情况,我试过:

 SET_SOURCE_FILES_PROPERTIES( foo.cpp PROPERTIES COMPILE_FLAGS -Wall )
 ADD_EXECUTABLE( foo foo.cpp )
Run Code Online (Sandbox Code Playgroud)

,这没用.我也试过了

SET_PROPERTY( SOURCE foo.cpp PROPERTY COMPILE_FLAGS -Wall )
ADD_EXECUTABLE( foo foo.cpp )
Run Code Online (Sandbox Code Playgroud)

ADD_EXECUTABLE( foo foo.cpp )
SET_TARGET_PROPERTIES( foo PROPERTIES COMPILE_FLAGS -Wall )
Run Code Online (Sandbox Code Playgroud)

,其中既没有奏效.

最后,我尝试删除这个定义:

REMOVE_DEFINITIONS( -Weffc++ )
ADD_EXECUTABLE( foo foo.cpp )
ADD_DEFINITIONS( -Weffc++ )
Run Code Online (Sandbox Code Playgroud)

,这也没有用(意思是,我得到了很多关于商业图书馆的风格警告).(**注意:如果在构建可执行文件后不重新包含-Weffc ++指令,则会禁止警告.)

我也试过暂时删除编译标志:http: //www.cmake.org/pipermail/cmake/2007-June/014614.html ,但这没有帮助.

对此没有优雅的解决方案吗?

c++ cmake compiler-warnings

95
推荐指数
2
解决办法
6万
查看次数

多进程还是多线程? - 并行化数百万次迭代的简单计算并将结果存储在单个数据结构中

我有一个{string:list}条目的字典D,我在D中为一对字符串(s1,s2)计算函数f(D [s1],D [s2]) - > float.

另外,我创建了一个自定义矩阵类LabeledNumericMatrix,它允许我执行m [ID1,ID2] = 1.0等赋值.

我需要计算f(x,y)并将结果存储在m [x,y]中,用于字符串S集合中的所有2元组,包括s1 = s2时.这很容易编码为循环,但是当集合S的大小增长到10,000或更大的大值时,执行此代码需要相当长的时间.

我存储在标记矩阵m中的结果都不相互依赖.因此,使用python的多线程或多进程服务并行化这个计算似乎很简单.但是,由于cPython不能真正允许我通过线程同时执行f(x,y)的计算和m [x,y]的存储,似乎多进程是我唯一的选择.但是,我不认为多进程被设计为在进程之间传递大约1GB的数据结构,例如我的包含10000x10000元素的标记矩阵结构.

任何人都可以提供(a)如果我应该避免尝试并行化我的算法,以及(b)如果我可以进行并行化,如何做到这一点,最好是在cPython?

python multithreading numpy multiprocess

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