- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试学习 C,并且刚刚开始阅读“艰难地学习 C”这本书。在第二课中,作者提到了 Makefiles,并指出当使用命令“make example.c”时,“make”会自动调用 cc 来构建 .c 文件。出于好奇,我开始研究cc,因为我只熟悉gcc。根据用户 Jonathan Leffler 在 SO 的帖子“Difference between CC, gcc and g++?”中的说法,cc 通常链接到 Linux 中的 gcc。
所以这是我的问题:
1) 在 Linux 中 cc 如何链接到 gcc?这似乎是一个简单的问题,但我不知道它是否需要基本答案或高级操作系统答案。 (在 Red Hat Linux 上使用“env >> env_vars.txt”检查然后读取文本文件 env_vars.txt 的内容后,似乎 cc 不是一个用户在 SO 上声称的环境变量。)
2) 我们如何知道“make”在遇到 .c 文件(或任何其他文件)时将做什么的内部细节?例如,在 .c 文件的情况下,我们如何确切地知道或确认“make”将调用 cc,而不是直接使用 .c 文件调用 gcc(或不调用)? ('make' 是否引用默认 Makefile?如果是,我们如何读取此默认 Makefile 的内容?)
最佳答案
我无法回答所有 Linux,但希望这能给您足够的信息来确定适合您自己系统的答案。
- How does cc link to gcc
我们可以使用
$ type cc
cc is /usr/bin/cc
那么什么是/usr/bin/cc
?
$ ls -l /usr/bin/cc
lrwxrwxrwx 1 root root 20 Jun 29 2016 /usr/bin/cc -> /etc/alternatives/cc
所以它是一个符号链接(symbolic link) - 但由alternatives
系统管理。我们可以查询:
$ update-alternatives --query cc
Name: cc
Link: /usr/bin/cc
Slaves:
cc.1.gz /usr/share/man/man1/cc.1.gz
Status: auto
Best: /usr/bin/gcc
Value: /usr/bin/gcc
Alternative: /usr/bin/clang
Priority: 10
Slaves:
Alternative: /usr/bin/gcc
Priority: 20
Slaves:
cc.1.gz /usr/share/man/man1/gcc.1.gz
所以 cc
确实链接到 /usr/bin/gcc
。
请注意 /usr/bin/gcc
本身可能是一个符号链接(symbolic link) - 指向特定版本的 gcc
:
$ ls -l /usr/bin/gcc
lrwxrwxrwx 1 root root 5 Feb 11 2016 /usr/bin/gcc -> gcc-5
- How do we know the internal details of what 'make' will do when it encounters a .c file
给定一个文件 hello.c
然后我们可以使用 -n
选项检查 make
会做什么:
$ make -n hello
cc hello.c -o hello
除此之外,您还可以引用您系统的 make
版本的文档 - 例如 GNU make: Catalogue of Rules
关于linux - Linux中Make、Makefile、cc、gcc是怎么连接的?如何知道 'make' 将对 .c 文件做什么? ( 'make' 会调用 cc 还是 gcc?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51510095/
我试图找到使用这行代码的原因 var cc = cc = cc || {}; 在 Cocos2D JavaScript 库中,例如 this地方,但我找不到任何合理的理由。就设置默认值而言,单一赋值是
我的 make 文件中有这些行: ifeq ($(SYSTEM),SOLARIS) # SUN Solaris 8 no c99 ifeq ($(OSVER),510)
服务器详细信息 MySQL 5.6.22 256GB 内存 4TB 固态硬盘 32 核 背景信息 有一个删除进程,每秒大约执行 3 次删除。每秒 2-3k QPS。主要是 SELECT。没有长时间运行
我正在 Spring 的帮助下发送邮件,其中我想要 CC 中的多个电子邮件 ID,所有人都会收到邮件,但问题是当他们在rackspace(apps.rackspace.com)中打开电子邮件时,它只显
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我有一个生成文件。当我在 Unix 上运行它时,我得到这个错误: cc -I/opt/oracle/product/9.2.0/rdbms/demo -I/opt/oracle/product/9.2
直观的逻辑,具有 build 性,是函数式编程中类型系统的基础。经典逻辑不是 build 性的,尤其是排中律 A ∨ ¬A(或其等价物,例如 double negation elimination 或
我必须使用我之前创建的列表文件在 C++ 中编写一个队列,并且我很难编译所有内容。 我目前遇到的问题是,当我编译时出现错误: Queue.h:7:2: 错误:'List' 没有命名类型 如何正确连接队
使用支持延续的语言,例如Scheme、Ruby 和 Haskell,假设有一个函数 cc' 不带参数并返回当前延续,以便通过调用 cc' 获得延续的调用者然后可以随心所欲地在任何地方调用延续。 cc'
我有一个 InDesign 文档,其中包含不同宽度尺寸的页面。现在我想用 JS 脚本添加垂直指南。因此我必须添加 pageWidth + pageWidth (特定页面的)。 但我只知道如何获取文档尺
像这样,我有一个对象: { 'person': { 'like': { 'color': 'red', 'food': 'rice' }, 'nam
我知道我可以用: string input = "AA,BB,CC"; string output = ""; foreach (var item in
我正在尝试使用我使用 Label-img 标记的样本来训练对象检测算法。我的图像尺寸为 1100 x 1100 像素。我使用的算法是在 TensorFlow 2 Detection Model Zoo
我正在尝试学习 C,并且刚刚开始阅读“艰难地学习 C”这本书。在第二课中,作者提到了 Makefiles,并指出当使用命令“make example.c”时,“make”会自动调用 cc 来构建 .c
在我的主要方法的一开始,我就有了 main(int argc, char *argv[]){ if(argc!=2){ printf("not enough arguments"); ex
因此,我有一个 c 模块,其中我修改了两件事:向函数添加了一个参数,向结构体添加了一个参数。 问题是,当使用 cc 进行编译时(从我继承的脚本),无论我的更改在哪里,我都会收到错误消息(抱歉,如果翻译
我浪费了很多时间来弄清楚为什么一种算法应该比另一种算法更有效,然而,就速度而言,另一种算法却完全相同。我做了这些操作:我在一个单独的终端窗口中编译了第一个源代码;而第二个源代码在另一个窗口中。我只是用
多次按 Tab 不会将文本向右移动。有没有办法让它表现得像 Visual Studio 的智能缩进?第一个制表符缩进,随后的制表符将文本移动到下一个制表位。谢谢你。 最佳答案 像这样的东西? (def
如果我使用 C 编译器 cc,则命令行完成不起作用。如果我输入 cc dig + press tab 那么什么都不会发生,但是如果我用 cc digenv.c 编译程序,那么它就可以工作。为什么 cc
有人对它的工作原理有很好的指导吗?带有视觉辅助的东西会很好,我遇到的每个指南似乎都在说我需要重新尝试的同一件事。 最佳答案 这是留在CS实验室白板上的图。因此,您将要获取一些苹果,然后在开始操作之前先
我是一名优秀的程序员,十分优秀!