回到 Xcode 9,有一个名为“Clean Build Folder...” ( ???K)的构建选项,它删除了构建文件夹中的所有文件,只留下没有内容的文件夹。从那时起,此行为被删除,菜单项的标题更改为“Clean Build Folder”,现在表现得像以前的“Clean”。
xcodebuild有一个名为的构建选项clean,它与 Xcode 的“Clean Build Folder” ( ??K)做同样的事情,它会留下一些东西。
有没有办法通过可编写脚本的命令删除构建文件夹中的所有文件?
到目前为止我尝试过的:
xcodebuild clean -workspace "My Workspace.xcworkspace" -scheme "My Scheme"
Run Code Online (Sandbox Code Playgroud)
正如我所说,这实际上并没有清理所有内容。为此,我将这个 bodge 添加到我的构建脚本中:
export IS_XCODE_CACHE_FOLDER_PRESENT="`ls -la ~/Library/Developer/ | grep -x "Xcode"`"
if [ 0 -ne "$IS_XCODE_CACHE_FOLDER_PRESENT" ]; then
echo "Xcode cache folder should not be present at build time! Attempting to delete..."
rm -rf "~/Library/Developer/Xcode"
RM_RESULT=$?
if [ 0 -ne "$RM_RESULT" ]; then
echo …Run Code Online (Sandbox Code Playgroud) 为了测试某个功能, cppreference 提到了这些功能测试宏: link。
如果编译器中存在该功能,则定义宏。但我不明白为什么,如果定义了,它们会被定义为类似的东西201606,我相信这是C++ 的版本,而不是编译器的版本。
例如,我正在使用 GCC 的最新版本来实现-std=c++17该功能__cpp_lib_hardware_interference_size。该宏未定义,我认为这意味着 GCC 没有该功能,尽管尝试使用 c++17(和 c++2a)开关 8.2.1。在这种情况下,记录值的意义是什么:
__cpp_lib_hardware_interference_size 201703
(在 cppreference 链接内)?
我正在遵循一个教程,该教程介绍了如何使用 gprof 分析程序,给出的命令如下
gcc -Wall -pg test_gprof.c test_gprof_new.c -o test_gprof
但它没有对这个标志给出任何解释(-Wall)
两个月前,我报作为一个clang++错误,那下面套C ++程序z,以4294967295在编译时clang++ -O2 -fno-strict-enums。
enum e { e1, e2 } e;
long long x, y, z;
char *p;
void f(void) {
e = (enum e) 4294967295;
x = (long long) e;
y = e > e1;
z = &p[e] - p;
}
Run Code Online (Sandbox Code Playgroud)
由于程序未定义,我的错误报告因无效而关闭。我的感觉是使用该选项-fno-strict-enums使其定义。
据我所知,Clang 没有名副其实的文档,因为它的目标是在它接受的选项及其含义方面与 GCC 兼容。我读了 GCC 的选项文档-fno-strict-enums说程序应该将值设置z为-1:
-fstrict-枚举
允许编译器使用以下假设进行优化:枚举类型的值只能是枚举值之一(如 C++ 标准中所定义;基本上,可以用最少位数表示的值来表示所有枚举器)。如果程序使用强制转换将任意整数值转换为枚举类型,则此假设可能无效。
请注意,仅记录了该选项-fstrict-enums,但似乎很清楚-fno-strict-enums禁用-fstrict-enums启用的编译器行为。我无法针对 GCC 的文档提交错误,因为生成设置z为的二进制文件, …
我刚读过这篇关于为什么存在新线警告的帖子,但说实话,我的团队让人们在几个不同的平台上工作,并且有几个不同的编辑(每个人都使用最好的套件),所以警告已经无处不在,并且因为它的不是真的值得注意它的警告会变成噪音,并且会发现严重的警告是一件麻烦事.
很多时候重要的警告都没有引起注意,因为人们已经习惯了无数的无用警告经过,所以他们显然只是停止仔细观察它们,并且有理由恕我直言.有人可以说,在我们的案例中,海湾合作委员会正在哭泣狼太多,任何人都不再认真对待它,这是一种恶劣的态度,但它只是人性.
现在我们编译-Wall,因为我们想要警告,但有一个计数器标志,以避免新行警告?
注意:我看了一下手册,但在任何明显的地方找不到答案,所以我放弃了.
注意:为了回应Robert Gamble完全合理的解决方案,我们的代码是跨平台的,我们的人员和构建基于Linux,Solaris和Windows,所以新线......没有达成共识.有人的编译器总是会哭泣.因为有超过40名开发人员,以及其他非程序员工.
我使用Qt进行C++开发,今天我从.pro文件中生成了一个.vcproj文件.
我注意到在vcproj项目属性下,Qt将此标志添加到C/C++ - >命令行 - >其他选项
-Zm200
Run Code Online (Sandbox Code Playgroud)
什么是-Zm200?
这个问题关系到这一个,以及它的答案.
我刚刚发现了一些正在构建的构建中的丑陋.情况看起来有点像以下(用gmake格式编写); 请注意,这特别适用于sparc和x86硬件上的32位内存模型:
OBJ_SET1 := some objects
OBJ_SET2 := some objects
# note: OBJ_SET2 doesn't get this flag
${OBJ_SET1} : CCFLAGS += -PIC
${OBJ_SET1} ${OBJ_SET2} : %.o : %.cc
${CCC} ${CCFLAGS} -m32 -o ${@} -c ${<}
obj1.o : ${OBJ_SET1}
obj2.o : ${OBJ_SET2}
sharedlib.so : obj1.o obj2.o
obj1.o obj2.o sharedlib.so :
${LINK} ${LDFLAGS} -m32 -PIC -o ${@} ${^}
Run Code Online (Sandbox Code Playgroud)
显然,它可以在共享对象中混合使用和不使用PIC编译的对象(这已经使用了多年).我不太了解PIC是否知道这是一个好主意/聪明,而我的猜测是在这种情况下它不是必需的,而是它正在发生,因为有人不在乎找到正确的方法来做到这一点关于构建的新东西.
我的问题是:
我有一个FORTRAN代码,需要以下编译命令
gfortran -c interp.f -ffixed-format -ffix-line-length-none
Run Code Online (Sandbox Code Playgroud)
我在python中使用f2py模块编译了相同的内容
from numpy import f2py
f2py.compile(open('interp.f').read(),modulename='interp',extra_flags='-ffixed-format -ffix-line-length-none',verbose=0)
Run Code Online (Sandbox Code Playgroud)
它无法编译模块.它出现错误,指出无效的文件格式''at'ffize-format'
请帮忙
在Objective-C中,我在构建设置 - >其他C标志中设置了一堆编译器标志,这些标志正在代码中使用.例如:
Flag => -DPortNumber = 1
在代码中我能够访问它 @(PortNumber)
这在Swift中不起作用,我无法找到答案.
有没有办法让gcc输出可用的-march = arch选项?我遇到构建错误(尝试过-march=x86_64),我不知道我的选择是什么。
我使用的编译器是gcc似乎不喜欢的专有包装-march=skylake。标志应该是相同的,因此我假设要发送给gcc的所有选项以转储体系结构对于此包装器来说都是相同的。
我设法使gcc使用伪造的参数出错,并转储了一个列表,但是现在我正在通过包装器,所以我看不到它。
如何让gcc告诉我它支持什么?
compiler-flags ×10
gcc ×4
c++ ×2
compilation ×2
clang++ ×1
command-line ×1
dialect ×1
enums ×1
f2py ×1
fortran ×1
gprof ×1
python ×1
sunstudio ×1
swift ×1
warnings ×1
x86 ×1
xcodebuild ×1