如何同时编译头文件和C文件?

如何同时编译头文件和C文件?,c,header-files,C,Header Files,我创建了一个文件.h和一个文件.c如何在Ubuntu上编译它们?使用以下命令编译您的程序(对于GCC编译器): 无需编译file.h文件。使用以下命令编译程序(对于GCC编译器): 不需要编译file.h文件。您只需要编译.c文件,而不需要编译.h文件。 要在Ubuntu上编译file.c,您可以使用: …或: 可以预编译头文件,但在特定情况下只需要预编译头文件 如果file.h与file.c不在同一文件夹中,您可以使用GCC或Clang的-I选项。 示例:如果file.h位于include/

我创建了一个
文件.h
和一个
文件.c
如何在Ubuntu上编译它们?

使用以下命令编译您的程序(对于GCC编译器):


无需编译file.h文件。

使用以下命令编译程序(对于GCC编译器):


不需要编译file.h文件。

您只需要编译
.c
文件,而不需要编译
.h
文件。

要在Ubuntu上编译
file.c
,您可以使用:

…或:

可以预编译头文件,但在特定情况下只需要预编译头文件


如果
file.h
file.c
不在同一文件夹中,您可以使用GCC或Clang的
-I
选项。

示例:如果
file.h
位于
include/
文件夹中:

gcc -I include/ file.c -o my_program
file.c
中,您仍然有此指令,只有文件名:

#include "file.h"

您只需要编译
.c
文件,而不需要编译
.h
文件。

要在Ubuntu上编译
file.c
,您可以使用:

…或:

可以预编译头文件,但在特定情况下只需要预编译头文件


如果
file.h
file.c
不在同一文件夹中,您可以使用GCC或Clang的
-I
选项。

示例:如果
file.h
位于
include/
文件夹中:

gcc -I include/ file.c -o my_program
file.c
中,您仍然有此指令,只有文件名:

#include "file.h"

您还可以通过使用makefile来使用更通用的方法

以下是此类文件的一个简短示例:

# Declaration of variables
CC = gcc
CC_FLAGS = -w -Werror -Wall

# File names
# "prgoram" will be the name of the output produced from the make process
EXEC = program 
#Incorporates all the files with .c extension
SOURCES = $(wildcard *.c)
OBJECTS = $(SOURCES:.c=.o)

# Main target
$(EXEC): $(OBJECTS)
    $(CC) $(OBJECTS) -o $(EXEC)

# To obtain object files
%.o: %.c
    $(CC) -c $(CC_FLAGS) $< -o $@

# To remove generated files
clean:
    rm -f $(EXEC) $(OBJECTS)
此命令将自动将工作目录中的所有源文件链接到一个名为“program”的可执行文件中。要运行程序本身,只需使用以下命令:

  ./program
  make clean
要清理项目和创建的可执行文件,可以运行以下命令:

  ./program
  make clean

当处理包含大量源文件的较大项目时,makefile非常强大。您可以查看有关如何使用makefiles的更多指导。这也是一个关于该主题的非常详细的教程。

您还可以通过使用makefile来使用更通用的方法

以下是此类文件的一个简短示例:

# Declaration of variables
CC = gcc
CC_FLAGS = -w -Werror -Wall

# File names
# "prgoram" will be the name of the output produced from the make process
EXEC = program 
#Incorporates all the files with .c extension
SOURCES = $(wildcard *.c)
OBJECTS = $(SOURCES:.c=.o)

# Main target
$(EXEC): $(OBJECTS)
    $(CC) $(OBJECTS) -o $(EXEC)

# To obtain object files
%.o: %.c
    $(CC) -c $(CC_FLAGS) $< -o $@

# To remove generated files
clean:
    rm -f $(EXEC) $(OBJECTS)
此命令将自动将工作目录中的所有源文件链接到一个名为“program”的可执行文件中。要运行程序本身,只需使用以下命令:

  ./program
  make clean
要清理项目和创建的可执行文件,可以运行以下命令:

  ./program
  make clean

当处理包含大量源文件的较大项目时,makefile非常强大。您可以查看有关如何使用makefiles的更多指导。这也是一个关于这个主题的非常详细的教程。

Duplicate of:可能的Duplicate of您需要一个编译器。下载gcc?副本:可能的副本您需要一个编译器。下载gcc?它仍然没有编译它。它说“引用未定义到”main”“@user541409我想您有两个或多个.c文件。不,它只是一个。@user541409请确保您在
.c
文件中定义了一个名为
main()
的函数。这是启动程序时调用的第一个函数,因此您需要定义一个。我建议
gcc-Wall-Wextra-g file.c-o file
,因为您需要警告和调试信息(默认情况下,
gcc
不提供这些信息),所以它仍然不会编译。它说“引用未定义到”main”“@user541409我想您有两个或多个.c文件。不,它只是一个。@user541409请确保您在
.c
文件中定义了一个名为
main()
的函数。这是启动程序时调用的第一个函数,因此您需要定义一个。我建议
gcc-Wall-Wextra-g file.c-o file
,因为您需要警告和调试信息(默认情况下,
gcc
不提供这些信息)我推荐
gcc-Wall-Wextra-g file.c-o file
clang-Wall-Wextra-g file.c-o myprog
,可能是
-I include/
,因为您需要警告和调试信息(而
gcc
clang
默认不提供)使用
-Werror
也可以确保在编译器警告您的情况下,您不会尝试运行代码-它会将所有警告转换为错误。我建议使用
gcc-Wall-Wextra-g file.c-o file
clang-Wall-Wextra-g file.c-o myprog
,也许使用
-I include/
,因为您需要警告和调试信息(默认情况下,
gcc
clang
不提供这些信息),并且使用
-Werror
也可以确保您在编译器警告您的情况下不尝试运行代码-它会将所有警告转换为错误。