2012-03-24 30 views
5

c My ++ Dự án có cơ cấu như sauBiên soạn nhiều thư mục nguồn với g ++

src 
| 
|source1.cpp 
|source2.cpp 
| 
|<srcfolder1> 
|__ source11.cpp 
|__ source12.cpp 
| 
|<srcfolder2> 
|__ source21.cpp 
|__ source22.cpp 

Như có thể thấy có rất nhiều thư mục với nhiều file nguồn. Lệnh nào tôi cung cấp cho g ++ để biên dịch tất cả tệp nguồn thành một tệp .o duy nhất?

+0

Erm, cung cấp cho tất cả các tệp nguồn? –

+0

có khoảng 100 tệp nguồn. quá nhiều để liệt kê từng cái một trên dòng nhắc lệnh – pdeva

+4

Tôi nghĩ cách phổ biến trong các dự án phức tạp là có Makefiles trong mỗi thư mục con và gọi chúng từ thư mục mẹ. BTW, tại sao bạn không sử dụng IDE? – enobayram

Trả lời

5

Nếu bạn có nhiều file nguồn bạn thực sự nên cân nhắc viết một Makefile: http://mrbook.org/tutorials/make/

Bạn có thể ví dụ sử dụng một cú pháp tương tự như sau để biên dịch nhiều file (trong Makefile):

%.o : $(SRC_FOLDER)/%.cpp 
    $(CXX) -c -o [email protected] $< 
+0

Rolle, kiến ​​thức makefile của tôi bây giờ chỉ là những gì tôi đọc bài viết mà bạn đã liên kết;) Bạn có thể giải thích lệnh bạn mô tả không. dấu% là gì? – pdeva

+2

Phải có thêm hướng dẫn trực tuyến giải thích nó tốt hơn những gì tôi có thể giải thích ở đây. Về cơ bản các lần đọc ở trên: đối với mỗi tệp nguồn trong SRC_FOLDER (được xác định ở nơi khác), biên dịch bằng đối số dòng lệnh được xác định trong CXX, với cờ -c -o, đặt tên chúng thành cùng tên với tệp cpp nhưng có đuôi .o . Xem thêm chỉnh sửa của tôi ở trên – Rolle

2

Bạn cũng có thể sử dụng các hệ thống xây dựng sẽ tạo ra tệp thực tế thực tế cho bạn. Điều này trở nên quan trọng khi bạn cố gắng mở rộng dự án của mình và duy trì tốt makefile có thể trở thành một nhiệm vụ khó khăn. Tôi đề nghị bạn dành chút thời gian để học hỏi. Ví dụ: Scons, GNU autotools, qmakeCmake, trong số các loại khác. Tôi highlly reccomond việc sử dụng qmake hoặc Cmake vì chúng là cả hai nền tảng và dễ học.

Một tùy chọn khác mà bạn có là chỉ cần sử dụng một IDE! IDE tốt nhất c++ trên Linux mà tôi biết và là nền tảng chéo, là Qt Creator. Dưới mui xe, nó hỗ trợ cả hai dự án qmakeCmake.

1

Nếu bạn đang sử dụng để làm việc với Visual Studio và bạn phải biên dịch tập tin của bạn dưới Linux, không có cần phải bắt đầu làm tất cả mọi thứ trên dòng lệnh;)

Giống như GradGuy chỉ ra, QtCreator là một IDE tuyệt vời và tôi cũng sử dụng nó để xây dựng các cửa sổ không phải của tôi. Tuy nhiên, nếu bạn không thực hiện bất kỳ công cụ GUI nào, bạn có thể muốn sử dụng nó cùng với cmake vì Qt chủ yếu là về GUI.

cmake là trình tạo máy phát cho các tệp giải pháp (như các tệp .sln của VS) độc lập với IDE hoặc hệ điều hành bạn đang chạy. Đó là phương pháp tiếp cận từ dưới lên, nơi bạn cần rất ít để tiếp tục.

Dưới đây là một số bước để giúp bạn bắt đầu

  • cài đặt QtCreator và cmake
  • viết một tập tin nói cmake nơi các file nguồn của bạn đang có và nơi để tìm thấy chúng.
  • tạo một file CMakeLists.txt trong thư mục trên src và viết bên trong như sau:

    project(myProject) 
    
    # set your include directories (if you have any) 
    include_directories(include) 
    
    # tell cmake what what are your source files 
    set(MY_CPP_FILES 
        src/source1.cpp 
        src/source2.cpp 
        src/srcfolder1/source11.cpp 
        src/srcfolder1/source12.cpp 
        src/srcfolder2/source21.cpp 
        src/srcfolder2/source22.cpp) 
    
    # if you are creating an executable then do so like this 
    # note that ${MY_CPP_FILES} will replace it with its content 
    add_executable(myExec ${MY_CPP_FILES}) 
    
    # if you instead want a library, do it like so 
    add_library(myStaticLib STATIC ${MY_CPP_FILES}) # create a static library 
    add_library(mySharedLib SHARED ${MY_CPP_FILES}) # create a shared library 
    
  • bây giờ bắt đầu QtCreator và chọn File -> Open File or Project và chọn CMakeLists.txt trên ổ đĩa của bạn

  • bây giờ bạn sẽ được yêu cầu chọn một đường dẫn nơi kết quả sẽ được lưu trữ (cũng như tất cả các tệp trung gian)
  • nhấn Run CMake
  • và cuối cùng chọn Build -> Build All

Chúc may mắn!

Các vấn đề liên quan