gcc不负责汇编文件中的预处理器吗?
我发现,gcc不负责汇编文件中的预处理器吗?,gcc,assembly,c-preprocessor,eclipse-cdt,Gcc,Assembly,C Preprocessor,Eclipse Cdt,我发现,CDT使用相应的后端工具,如x86_64-w64-mingw32-as在eclipse上编译默认的汇编文件,该文件在C/C++Build>Settings>tool Settings>GCC Assembler上配置 ################################################################################ # Automatically-generated file. Do not edit! ###########
CDT
使用相应的后端工具,如x86_64-w64-mingw32-as
在eclipse上编译默认的汇编文件,该文件在C/C++Build>Settings>tool Settings>GCC Assembler
上配置
################################################################################
# Automatically-generated file. Do not edit!
################################################################################
# Each subdirectory must supply rules for building sources it contributes
src/%.o: ../src/%.c
@echo 'Building file: $<'
@echo 'Invoking: Cygwin C Compiler'
x86_64-w64-mingw32-gcc -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -o "$@" "$<"
@echo 'Finished building: $<'
@echo ' '
src/%.o: ../src/%.cpp
@echo 'Building file: $<'
@echo 'Invoking: Cygwin C++ Compiler'
x86_64-w64-mingw32-g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -o "$@" "$<"
@echo 'Finished building: $<'
@echo ' '
src/%.o: ../src/%.S
@echo 'Building file: $<'
@echo 'Invoking: GCC Assembler'
x86_64-w64-mingw32-as -o "$@" "$<"
@echo 'Finished building: $<'
@echo ' '
==
因此,是gcc负责预处理器(gcc工作程序的一个步骤),对吗?
根据这种想法,以下(.S)将起作用
/* https://sourceforge.net/p/predef/wiki/Architectures */
/* #ifdef __LP64__ || _LP64 */
#if defined(__i386__) || defined(_M_IX86)
# include "nomakefile/foo_x86.S"
#elif defined(__x86_64__) || defined(_M_X64) || defined(_M_AMD64)
# include "nomakefile/foo_x64.S"
#else
# error Unsupported architecture
#endif
同样
是的。
gcc
二进制文件决定调用什么程序。如果它看到一个后缀为s
的文件,它会将作为
调用。如果它看到一个后缀为S
的文件,它将调用cpp
,然后将作为
。汇编程序本身不知道后缀约定,也不会为您调用C预处理器。是。gcc
二进制文件决定调用什么程序。如果它看到一个后缀为s
的文件,它会将作为
调用。如果它看到一个后缀为S
的文件,它将调用cpp
,然后将作为
。汇编程序as
本身不知道后缀约定,也不会为您调用C预处理器。如果您试图编写一个自我回答的Q&a,请确保该问题是一个正确的问题,不会包含太多答案。多个答案应该是可能的,来自其他人。回答我自己的问题很有趣,所以我忍不住去尝试。因此,它被标记为'-1'。是的,这是无用的,我知道我错了~我的观点与你的答案错了没有任何关系。问题的关键是,你在问题中所写的很多文字都应该在答案中。一个带有假设的巨大问题只有一个肯定/否定的答案。像“gcc如何决定运行什么”这样的小问题可以有一个真正的答案。事实上,我发现C预处理器在我的.S
文件中不起作用,然后我就猜到了,现在我从到得到了答案。如果你试图写一个自我回答的Q&A,请确保这个问题是一个正确的问题,不会包含太多答案。多个答案应该是可能的,来自其他人。回答我自己的问题很有趣,所以我忍不住去尝试。因此,它被标记为'-1'。是的,这是无用的,我知道我错了~我的观点与你的答案错了没有任何关系。问题的关键是,你在问题中所写的很多文字都应该在答案中。一个带有假设的巨大问题只有一个肯定/否定的答案。像“gcc如何决定运行什么”这样的小问题可以有一个真正的答案。事实上,我发现C预处理器在我的.S
文件中不起作用,然后我就猜到了,现在我从到得到了它
/* https://sourceforge.net/p/predef/wiki/Architectures */
/* #ifdef __LP64__ || _LP64 */
#if defined(__i386__) || defined(_M_IX86)
# include "nomakefile/foo_x86.S"
#elif defined(__x86_64__) || defined(_M_X64) || defined(_M_AMD64)
# include "nomakefile/foo_x64.S"
#else
# error Unsupported architecture
#endif