一个Code::Blocks项目中有多个小程序

5

我刚开始使用Code::Blocks。为了学习,我正在使用C语言编写几个小程序(只是为了试一下)。我尝试将它们全部放在一个项目中,因为它们属于同一个主题,但是这样做不起作用,因为它们每个都有一个main函数。

有什么办法可以将这些文件合并到一起,但彼此之间不依赖?


你可以创建自己的Makefile。 - MOHAMED
抱歉,我对C语言不熟悉,您的意思是什么?还有,怎样实现呢? - Laura
6个回答

9
假设您的源文件名为:
- prog1.c - prog2.c - mylib.c - mylib.h
其中,prog1.c 和 prog2.c 都包含一个 main() 函数,而 mylib.c(以及相应的头文件 mylib.h)包含一些库函数,这些函数应该被链接到每个程序中。在 Code::Blocks 项目中,现在需要创建多个目标。从菜单中选择“文件/新建/构建目标...”,并将它们命名为“prog1”和“prog2”。现在将所有源文件添加到项目中(如果您还没有这样做的话)。
接下来,在 prog1.c 上右键单击,并从上下文菜单中选择“属性...”。在对话框中选择“Build”选项卡,并确保在“属于目标”下只有“prog1”被选中。对于 prog2.c 和目标“prog2”也同样操作。对于“mylib.c”,请确保“prog1”和“prog2”都被选中。
现在,您可以轻松地在 UI 中选择要构建和运行的构建目标。请注意,如果您添加另一个目标,比如“prog3”,那么您必须再次进入 prog1.c 和 prog2.c 的构建属性,然后取消勾选“prog3”。

2

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

您可以使用switch case来调用不同的函数。

从所有程序中删除main函数并将其转换为函数

在需要的地方调用它们,这将有助于您。


1
我知道一个C程序应该只包含一个主函数。我不想把它们放到函数中,因为这些小程序是独立的,彼此之间没有关联,所以从一个文件中调用它们都没有意义。 - Laura
1
不,那对我没有帮助,因为我稍后必须提交这些文件,然后它们必须是独立的。我只想编译和运行我正在工作的文件,而不是所有文件。如果没有可能做到这一点,我将改回我的旧编辑器。 - Laura

1
假设您的项目包含3个C文件,每个C文件都是一个独立的程序,并且它包含自己的main函数:
  • program1.c
  • program2.c
  • program3.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

这与程序1有关,仅构建程序1。

或者您可以使用此命令构建所有程序:

$make all

2
那么我在哪里输入 $make program1?命令行吗?通常我会使用 F9 进行构建和运行。 - Laura
1
@mvuajua,我有点困惑为什么你接受这个答案,因为它实际上并没有回答你关于code::blocks的问题。 - eric
@neuronet,已经过去五年了,但我认为这就是当时我选择的方案,其他答案都来得太晚了。 - Laura

1

看起来你正在开始构建一些不错的实用函数。所以按照raghu-srikanth-reddyce提供的建议,为每个小程序创建单独的函数。但是我想补充说,最好创建一个简单的C库来保存它们,这样你可以随时链接到它们。大多数专业程序员都保留这样的库。

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

祝你编程顺利 ;)


不,我只是在完成教授分配的任务。我只想编译一个文件,与其他文件无关。 - Laura

0
如果您想编译成一个文件,那么就不需要一个“项目文件”了。只需创建一个“新文件”,然后将所有代码写在一个文件中即可。如果需要,还可以使用“函数”和“过程”。

0

虽然已经有点晚了,但是既然我曾经也有同样的问题,而且我相信大多数学生都有/曾经有/将来会有这个问题,让我详细解释一下你被玩弄的地方。

在教育课程和现实世界中,一个项目(通常)是你要解决的某个问题,然后对其进行报告(+文档)。

在编程IDE中,项目本身就是问题的解决方案。因此,尽管您可能在任何Python IDE中的一个项目中有多个单独的问题,在任何标准的C/C++ IDE项目中,必须只有一个“main()”来统治它们所有人(除非您知道如何创建makefiles)。

AP试图做的是将几个不同的问题的解决方案适合一个解决方案的空间中-这在Code :: Blocks中是不可能的事情。即使所有问题都可以共享相同的主题(比如,图论),它们本身也是单独的问题(Dijkstra vs Floyd)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接