g++로 컴파일할 때 헤더가 참조하는 .cc 파일들을 하나로 언급할 수 있을까요?

dltkddyd의 이미지

a.h, a.cc
b.h, b.cc
c.h, c.cc

파일이 있다고 할 때,

-a.cc-
#include "a.h"
//이하 생략~~~~~

-b.cc-
#include "b.h"
//이하 생략~~~~~

-c.cc-
#include "c.h"
//이하 생략~~~~~

위와 같이 헤더의 구현파일을 참조합니다. 그리고

-c.h-
#include "a.h"
#include "b.h"

이와 같이 c.h 파일이 다른 헤더를 포함합니다.

그리고 program.cc 파일을

-program.cc-
#include "c.h"
//이하 생략~~

하고 다음과 같이 컴파일을 해보았는데,

g++ -o program program.cc c.cc

컴파일이 제대로 이루어지지 않습니다. 물론 이렇게 하면

g++ -o program program.cc a.cc b.cc

라고 헤더가 참조해야할 파일들을 모두 언급하면 컴파일이 확실히 되지만, c.h 가 포함하고 있는 헤더파일이 한, 두 개가 아니라 100개 이상이 된다면, 위와 같은 방식으로 일일이 헤더의 참조파일을 언급하는 것은 번거롭고 비효율적입니다. 위에서 언급한 대로 다음과 같이 c.cc 파일을 언급하는 것으로 컴파일 할 수 있는 방법은 없나요?

g++ -o program program.cc c.cc

chanik의 이미지

의존관계를 Makefile로 표현해서 make로 해결할 문제인 것 같습니다

참고: Make 기반 빌드 시스템: 빌드 시스템(?) 그리고 Makefile 기초

klyx의 이미지

그런건 불가능합니다. 해더파일과 소스파일은 1대1로 대응되는 관계도 아니고 그 이름에도 아무런 규칙도 없으며, 또한 서로 다른 프로젝트끼리 참조하기도 합니다. chanik말씀대로 Makefile이나 CMake같은 빌드툴을 이용하시거나, IDE로 프로젝트를 관리하는 방법이 있겠습니다.

Anti-Lock의 이미지

언급된 방법은.. 컴파일과 링크를 모두 수행하도록 하는 명령입니다.
중간 결과물은 만들어 지지 않구요...

"구현"은 모두 h 파일에 있고, cc파일은 인클루드만 하는 상황인가요? 확인바랍니다.
안될 이유는 없어 보이는데요...
혹시 컴파일 에러가 아니라 링크에러 아닌가요?
(이 경우에는 a.cc와 b.cc에 구현코드가 있을것 같습니다.)

그리고 "헤더가 참조하는 cc파일"이 무엇인지 모르겠습니다.
예를 드신 코드에는 해당 경우가 없지 않나요?

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.