5

我是 Code::Blocks 的新手。对于我的学习,我正在用 C 编写几个小程序(只是为了尝试一下)。我试图将它们全部放在一个项目中,因为它们属于同一个主题,但这不起作用,因为它们每个都有一个主要功能。

有什么想法可以以某种方式将这些文件放在一起,但不依赖于彼此?

4

6 回答 6

9

假设您的源文件被称为

  • 程序1.c
  • 程序2.c
  • mylib.c
  • mylib.h

其中 prog1.c 和 prog2.c 每个都包含一个 main() 函数,而 mylib.c(带有相应的头文件 mylib.h)包含一些应该链接到每个程序的库函数。在您的 Code::Blocks 项目中,您现在需要创建多个目标。从菜单中选择“文件/新建/构建目标...”并将它们命名为“prog1”和“prog2”。现在将所有源文件添加到项目中(以防您尚未这样做)。

现在右键单击 prog1.c 并从上下文菜单中选择“属性...”。在对话框中选择“构建”选项卡并确保在“属于目标”下仅选中“prog1”。对 prog2.c 和目标“prog2”执行相同的操作。对于“mylib.c”,请确保检查“prog1”和“prog2”。

现在您可以轻松地在 UI 中选择要构建和运行的构建目标。请注意,如果您添加另一个目标,例如“prog3”,那么您必须再次转到 prog1.c 和 prog2.c 的构建属性并取消选中“prog3”。

于 2014-08-29T15:28:09.860 回答
2

一个C程序应该只包含一个主函数。将所有单独的程序划分为函数并将它们放在一个 C 程序中,或者您甚至可以将它放在多个文件中并编译它们。

您可以使用 aswitch case来调用不同的功能..

从所有程序中删除main function并将它们转换为functions..

在需要的地方给他们打电话..这将对您有所帮助..

于 2013-01-18T10:10:06.750 回答
1

在我看来,好像您开始构建一些不错的实用程序功能。因此,请遵循 raghu-srikanth-reddyce 提供的建议,并为每个小程序创建单独的函数。但是我要补充一点,最好为自己创建一个简单的 C 库,以将它们全部保存在其中,您可以随时链接到其中。大多数专业程序员都保留这样的库。

一个简单的 makefile 将使您能够构建可以链接到的最终二进制文件。

祝你编程好运;)

于 2013-01-18T10:18:46.243 回答
1

假设您的项目包含 3 个 c 文件,每个 c 文件都是一个单独的程序,并且它包含自己的main功能:

  • 程序1.c
  • 程序2.c
  • 程序3.c

因此,您可以编写一个 Makefile(它在您的计算机中的名称应该是"Makfile")。它将单独构建您想要的程序

这是您的 makefile 的外观:

all: program1 program2 program3

%.o: %.c
    $(CC) $(CFLAGS) -c -o $@ $^

program1: program1.o
    $(CC) $(LDFLAGS) -o $@ $^

program2: program2.o
    $(CC) $(LDFLAGS) -o $@ $^

program3: program3.o
    $(CC) $(LDFLAGS) -o $@ $^

clean:
    rm -f *.o program1 program2 program3

使用上面的 Makefile,您可以单独构建每个程序

例子

$ make program1

将仅构建 program1

或者你可以用

$make all
于 2013-01-18T10:34:18.773 回答
0

如果要在一个文件中编译,则不需要项目文件。只需创建一个New File,然后将所有代码写入一个文件中。如果需要,也可以使用函数过程。

于 2016-03-23T05:13:41.140 回答
0

这已经很晚了,但是因为我曾经在这里问过同样的问题,而且我相信大多数学生都有/曾经/将会有同样的问题,让我详细说明一下你在哪里玩过。

在教育课程和现实世界中,项目(通常)是您处理的一些问题,找到解决方案,然后对其进行报告(+文档)。

在 Programming IDE 中,项目本身就是问题的解决方案。因此,虽然您可能在任何 Python IDE 中的一个项目中遇到多个单独的问题,但任何标准 C/C++ IDE 项目都必须只有一个“main()”来解决所有问题(除非您知道如何创建 makefile)。

AP 试图做的是将几个不同问题的解决方案放在一个解决方案的空间内——这在 Code::Blocks 中是不可能的。即使所有问题可能共享同一个主题(例如图论),它们本身也是个别问题(Dijkstra vs Floyd)。

于 2018-08-13T12:59:12.780 回答