1

複数のファイルを含むプロジェクトがあります。コマンド ラインから gcc を使用してコンパイルしたいと考えています。

ディレクトリは次のようになります

lib/
    Comp/                              contains .cpp files
    Decomp/                            contains .cpp files
    Globals.cpp
include/
    Comp/                              contains .h files
    Decomp/                            contains .h files
    Globals.h

これらの .h ファイルの一部は .cpp ファイルとペアになっていません

これをコンパイルするには、次のようなものを使用します:

g++ lib/Comp/* lib/Decomp/* lib/Globals.cpp -std=c++0x -o TEST

#define問題は、 .h ファイルごとにいくつかの s を追加する必要があり、コマンド ラインから実行する必要があることです。これを行う方法 ??

また、各ファイルを個別にコンパイルしてからリンクする必要がある場合。これを行うための適切な順序は何ですか?

4

2 に答える 2

1

最も汚い方法は、次のようなものを使用することです。

g++ -Iinclude lib/Comp/*.cpp lib/Decomp/*.cpp lib/Globals.cpp -o test

あなたの .cpp ファイルは#include <Comp/foo.h>何をすべきか

これを管理する正しい方法は、makefile を使用して各オブジェクト ファイルを作成し、それらをリンクすることです。

メイクファイル

という aa ファイルを作成Makefileし、その中に以下を入れます。

CXX=g++
CPPFLAGS=-Iinclude -DFOO -DBAR=1 -DSOME_STRING=\"My Name\"
CXXFLAGS=-O2 -g 

SOURCES=lib/Comp/file1.cpp \
        lib/Comp/file2.cpp \
        lib/Comp/file3.cpp \
        lib/Decomp/file1.cpp \
        lib/Decomp/file2.cpp \
        ... 

OBJ=$(SOURCES:%.cpp=%.o)


default: test

test: $(OBJ)
<tab>     $(CXX) -o $@ $(OBJ) 

%.o: %.cpp
<tab>     $(CXX) $(CPPFLAGS) $(CXXFLAGS) -o $@ -c $< 

ノート

file1.cpp などをプロジェクトの実際のファイル名に置き換えます。SOURCES にヘッダーを含めないでください。.cpp または .cc ファイルのみ

#include <Comp/foo.h>ソースファイルでまたはのようなサブパス#include "Comp/foo.h"を使用している場合は、CPPFLAGS で -Iinclude を使用するだけで済みますが、「foo.h」のようなことを行っていて、foo.h が実際に include/Comp/ にある場合は、-Iinclude/Compand-Iinclude/Decompを追加します。 CPPFLAGS

タブを挿入するには<tab>必ずTABキーを使用してください(「」という単語を入力しないでください)

この Makefile をやみくもに使用する前に。エントリを修正する必要があるため、そのままでは機能しないことを知っておいてください。これは出発点として提供されています... Makefile の作成について読んでください... http://frank.mtsu.edu/~csdept/FacilitiesAndResources/make.htmに良い紹介があります

于 2013-05-09T07:35:45.007 に答える