Makefile 编译c/h?

发布于 2024-10-31 07:51:26 字数 805 浏览 0 评论 0原文

我需要编译一个旧的应用程序,其 tarball 仅包含 *.c 和 *h,即。没有生成文件。根目录包含应用程序,子目录包含应用程序所需的库。

我的 make/Makefile 知识不是很好,我想知道编译这个应用程序+库的最简单方法是什么。

谢谢。


编辑:使用这个脚本...

# cat compile.bash
#!/bin/bash

cd mylib
for cfile in *.c; do
   ofile=$(echo "$cfile" | sed 's#.c$#.so#')
   gcc -shared -c "$cfile" -o "$ofile"
done

cd ..
gcc *.c -I mylib -L mylib -mylib -o myapp

...我注意到 mylib/ 中的每个 *.c 文件都被编译成 *.so 文件,而不是将每个文件编译成目标文件并构建单个 .so 文件,我得到了很多警告和错误,例如。

unzip.c: In function âunzipâ:
unzip.c:991: warning: format not a string literal and no format arguments

gcc: unrecognized option '-mylib'

file_util.c: In function âfile_moveâ:
file_util.c:98: error: âerrnoâ undeclared (first use in this function)

我不知道如何编译库,然后编译应用程序而不会出现错误/警告。

I need to compile an old application whose tarball only contains *.c and *h, ie. no Makefile. The root directory contains the application, and a sub-directory contains a library the application needs.

My make/Makefile knowledge isn't great, and I was wondering what the easiest way would be to compile this application + library.

Thank you.


Edit: Using this script...

# cat compile.bash
#!/bin/bash

cd mylib
for cfile in *.c; do
   ofile=$(echo "$cfile" | sed 's#.c$#.so#')
   gcc -shared -c "$cfile" -o "$ofile"
done

cd ..
gcc *.c -I mylib -L mylib -mylib -o myapp

... I notice that each *.c file in mylib/ is compiled into a *.so file instead of compiling each into an object file and building a single .so file, and I get tons of warnings and errors, eg.

unzip.c: In function âunzipâ:
unzip.c:991: warning: format not a string literal and no format arguments

gcc: unrecognized option '-mylib'

file_util.c: In function âfile_moveâ:
file_util.c:98: error: âerrnoâ undeclared (first use in this function)

I don't know how to compile the library, and then compile the application without error/warning.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

讽刺将军 2024-11-07 07:51:26

无需使用 for 循环或生成中间目标文件:

 (cd mylib && gcc -shared -fPIC -o libfoo.so *.c) && \
   gcc -Imylib -o app *.c mylib/libfoo.so

No need to use a for loop or generate intermediate object files:

 (cd mylib && gcc -shared -fPIC -o libfoo.so *.c) && \
   gcc -Imylib -o app *.c mylib/libfoo.so
静若繁花 2024-11-07 07:51:26

编译库:

cd libfoo
for cfile in *.c; do
   ofile=$(echo "$cfile" | sed 's#.c$#.so#')
   gcc -shared -c "$cfile" -o "$ofile"
done

之后,libfoo/ 中应该有一个 libfoo.so 文件。然后,编译程序(不要忘记 cd 返回):

gcc *.c -I libfoo -L libfoo -lfoo -o application

Compile the library:

cd libfoo
for cfile in *.c; do
   ofile=$(echo "$cfile" | sed 's#.c$#.so#')
   gcc -shared -c "$cfile" -o "$ofile"
done

After this, you should have a libfoo.so file in libfoo/. Then, compile the program (Don't forget to cd back):

gcc *.c -I libfoo -L libfoo -lfoo -o application
誰ツ都不明白 2024-11-07 07:51:26

最简单的方法可能是使用 IDE 来为您进行构建。 Netbeans 会创建一个 Makefile,这样您就可以独立于 IDE 构建项目。

The easiest is probably to get an IDE to do the build for you. Netbeans for one will create a Makefile so you can then build the project independently of the IDE.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文