Tag: compiler flags

附加到CMAKE_C_FLAGS

我正在使用CMake进行两个版本的项目,其中一个需要-lglapi而另一个不需要。 到目前为止,我们使用的线条看起来像这样: SET(CMAKE_C_FLAGS “-O3 -xSSE3 -restrict -lpthread -lX11 -ldrm”) SET(CMAKE_CXX_FLAGS “-O3 -xSSE3 -restrict -lpthread -lX11 -ldrm”) 我在我的CMakeList.txt中添加了一个if语句,紧跟在这些行之后: if(SINGLE_MODE) SET(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} ” -lglapi”) SET(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} ” -lglapi”) endif(SINGLE_MODE) SINGLE_MODE变量定义了一点点。 当我使用message命令显示标志变量的内容时,它看起来没问题: -O3 -xSSE3 -restrict -lpthread -lX11 -ldrm -lglapi 但是当我开始编译时,我遇到了编译错误。 使用详细模式我意识到在编译器调用中看起来像: -O3 -xSSE3 -restrict -lpthread -lX11 -ldrm; -lglapi 也就是说,在将-lglapi添加到列表之前添加了分号。 这里有没有人遇到类似的问题,并知道解决这个问题的方法? 我用谷歌搜索了很长一段时间并研究了CMake手册,但看不出我在这里做错了什么。 谢谢,托比亚斯

如何在代码块上添加编译器标志

我一直在尝试编译一个我在网上找到的简单的multithreading代码,以学习如何multithreading。 要运行这段代码,我需要使用编译器标志: -pthread和-std=c++0x 。 但每当我尝试添加标志时,构建日志都不会显示它们被使用。 我已经尝试了一些在线的通用技巧,以使这些工作起作用,但它们都没有奏效。 有人可以帮忙吗? 我已经尝试了其他在线建议将编译器标志添加到代码块,但是当我这样做并检查构建日志时,它们都没有出现。

我应该使用“-ansi”或显式“-std = …”作为编译器标志吗?

我已经读过 ANSI C与ISO C不完全相同,编译器可能在解释“-ansi”的含义上有所不同。 (gcc将其映射到C90,clang将其映射到C89)目前我倾向于使用“-std = …”而不是“-ansi”,因为它明确地显示了使用哪个标准。 由于我特别感兴趣的是在Linux,Windows和MAC上编译,我担心一些编译器无法理解“-std = …”而是“-ansi”。 那么使用一个在另一个上有任何利弊吗?

如何禁用“curses.h”头文件(Xcode 6.3 OSX Yosemite中的“stdio.h”的一部分)以避免冲突的函数声明

我正在尝试在Xcode中构建一个项目,但是我得到了错误Implicit declaration of function ‘clear’ is invalid in C99 Conflicting types for ‘clear’ Implicit declaration of function ‘clear’ is invalid in C99 。 这是代码: //main.c #include #include “tree.h” int main(){ clear(); // Implicit declaration of function ‘clear’ is invalid in C99 return 0; } //tree.c #include #include “tree.h” void clear(){ ///Conflicting types for ‘clear’ printf(“Command […]

我应该使用哪些编译标志来避免运行时错误

刚刚在这里了解到-Wsequence-point comiplation标志会在代码调用UB时弹出警告。 我在类似的声明上尝试过 int x = 1; int y = x+ ++x; 它工作得非常好。 到目前为止,我只使用-ansi -pedantic -Wall编译gcc或g++ 。 你有没有其他有用的标志来使代码更安全和健壮?