2011-02-03 42 views
12

Tôi có một chương trình bao gồm nhiều dự án trong nhật thực (làm việc trong ubuntu và các dự án đang ở trong C++), các dự án này bao gồm tệp thực thi chính và các tệp đối tượng được chia sẻ khác và tĩnh libs.Đặt thư mục đầu ra xây dựng trong Eclipse - C++

Tôi muốn tất cả các dự án này khi được xây dựng để xuất tệp của họ vào một thư mục nhị phân chung, thay vì các thư mục gỡ lỗi tương ứng của chúng. Điều này giúp cho việc liên kết dễ dàng hơn với tệp thực thi chính. Nếu có giải pháp tốt hơn, vui lòng chia sẻ.

Trả lời

13

Thật không may, tôi nhận thấy rằng tab C/C++ Build không cho phép bạn đặt vị trí xây dựng trừ khi bạn tạo trang makefile của riêng mình.

Bạn đã có thể phát hiện ra rằng Builder Cài đặt tab dưới Project Properties> C/C++ Build là tất cả chuyển sang màu xám trong một/C++ Dự án mặc định C. Điều này là do CDT chỉ định trình xây dựng nội bộ theo mặc định cho các dự án mới. Để thay đổi điều này, bạn có thể chuyển đến Thuộc tính dự án> C/C++ Build> Công cụ biên tập chuỗi và thay đổi Bộ dựng hiện tại thành Gnu Make Builder. Tiếp theo, chuyển đến Thuộc tính dự án> C/C++ Build và thay đổi Loại Builder thành Bộ dựng ngoài. Bây giờ bạn có thể chọn tạo ra makefile của riêng bạn cho dự án, nếu bạn thích; mặc dù tôi khuyên bạn nên để CDT tự động xây dựng makefile ngay bây giờ.

Tôi có cùng yêu cầu dự án để xuất ra một/project_path/bin (mặc dù tôi vẫn duy trì sự tách biệt giữa các bản dựng Gỡ lỗi và Bản phát hành). Để thực hiện điều này, tôi thực hiện thao tác sao chép trên đầu ra dưới dạng bước đăng bài.

Để thực hiện việc này, hãy truy cập Thuộc tính dự án> Xây dựng C/C++> Cài đặt và chọn tab Xây dựng bước. Trong Post-build bước dưới Command:, hãy nhập:

cp ${BuildArtifactFilePrefix}${BuildArtifactFileName} "/path/to/bin/directory/"; 

Rõ ràng thay thế "/ path/to/bin/thư mục /" theo yêu cầu.

Cá nhân tôi muốn duy trì các tệp dự án của mình trong một thư mục không gian làm việc/xây dựng; sao chép các tệp nhị phân vào thư mục và thư viện không gian làm việc/bin vào một thư mục không gian làm việc/lib. Lúc đầu, tôi thấy bản sửa lỗi bản sao này là một sự bất tiện, nhưng đã đến để đánh giá cao nó bởi vì nó cô lập các tệp xây dựng xen kẽ từ nhị phân/thư viện cuối cùng.

Đối với những chương trình, tôi sẽ sử dụng:

cp ${BuildArtifactFilePrefix}${BuildArtifactFileName} "${WorkspaceDirPath}/bin/"; 

Đối với thư viện, tôi sẽ sử dụng:

cp ${BuildArtifactFilePrefix}${BuildArtifactFileName} "${WorkspaceDirPath}/lib/"; 

tôi bao gồm biến "$ {BuildArtifactFilePrefix}" vì CDT bao gồm "lib" như một tiền tố mặc định cho các thư viện tĩnh mà tôi thực sự thích.

Bạn chỉ cần đảm bảo rằng thư mục đích tồn tại trước khi xây dựng; Eclipse/CDT sẽ không tạo thư mục cho bạn.

Ngoài ra, chỉ cần nhớ rằng các bản sao này sẽ bị tụt hậu trong /bin hoặc /lib thư mục trên sạch sẽ, nhưng ghi đè trên bất kỳ sau đó xây dựng lại.

+0

Giải pháp tuyệt vời, cảm ơn –

+0

Có một tùy chọn cho bước sau xây dựng, do đó, điều dễ nhất là để nó xây dựng vị trí và nếu hoạt động, hãy sử dụng bước xây dựng để sao chép/di chuyển/liên kết nó. Có một macro đặc biệt cho Debug hoặc Release vì vậy tôi có thể sử dụng macro phổ biến cho cả hai cấu hình? – CashCow

0

Nếu bạn mở thuộc tính của dự án, có một tab C/C++ Build. Điều này có một tùy chọn để xây dựng vị trí, nơi bạn có thể chỉ định thư mục xây dựng. Có vẻ như bạn có thể thay đổi điều này cho nhiều dự án của bạn để họ chia sẻ cùng một thư mục xây dựng.

4

Hãy thử Project->Properties

Dưới C/C++ Build->Settings bạn có một tab gọi Build Artifact.

Dưới đó bạn có Artifact name. Giá trị mặc định này là ${ProjName}.

Sửa đổi điều này để chỉ định đường dẫn thư mục tương đối đến nơi bạn thực sự muốn tệp cuối cùng kết thúc. Vì vậy, có thể là ../../lib/${ProjName}

Tệp trung gian (.o và .d) sẽ vẫn xây dựng vào thư mục con (Gỡ lỗi hoặc Phát hành) nhưng tôi đoán là tốt hơn nếu chúng ở đó và nó chỉ là thư viện được xây dựng cuối cùng mà bạn muốn thay đổi đường dẫn xây dựng.

Nếu bạn thấy nó bất tiện khi gõ đường dẫn tương đối như thế này, tôi sử dụng Môi trường để tạo biến môi trường với đường dẫn tương đối đưa tôi trở lại "gốc". Một trong những điều này tôi có là ${LIBDIR} và đây là một đường dẫn tương đối từ nơi dự án được xây dựng. Nó thường được sử dụng để liên kết trong các thư viện khác, nhưng cũng có thể được sử dụng như một mục tiêu. Sau đó, bạn sẽ đặt Tên tác phẩm thành ${LIBDIR}/${ProjName} hoạt động tốt nếu bạn sử dụng các thư mục khác nhau để gỡ lỗi và phát hành các bản dựng.

+1

Điều này không có hiệu lực. Sử dụng phiên bản Luna 4.4.0. Tôi có thể thay đổi tên của thực thi, nhưng phần đường dẫn bị bỏ qua. – truthseeker

+0

Thú vị, nó làm việc cho tôi. – CashCow

+0

Làm việc cho tôi cũng vậy, cảm ơn! $ {workspace_loc: MyProject}/_ runtime/$ {ProjName} – macroland

0

Chỉ cần xảy ra để được làm việc trên một cái gì đó mà dẫn tôi xuống một con đường tương tự - vì vậy tôi sẽ cung cấp nó lên như một giải pháp thay thế/nhắc nhở bản thân mình:

Trong Eclipse (ít nhất là trong Luna) các makefiles tạo thực sự khá phong nha và thuận tiện. Cá nhân tôi muốn tạo một số cấu hình xây dựng (các phiên bản Release và Debug với kiến ​​trúc 32 bit và 64 bit) và bổ sung chúng với cấu hình gỡ rối và chạy (F5 và Execute, tương ứng).

Để tiếp tục: Tôi đã chơi đùa với bao bì trên Debian và được tìm thấy - trong quá trình nói đùa - rằng tôi cần tạo và thử nghiệm mục tiêu cài đặt. Eclipse không tạo ra cho bạn, và cũng không cung cấp một giao diện cho - một cấu hình - để tùy chỉnh hoặc thêm một mục tiêu cài đặt; Khác với một nơi mà bạn có thể chỉ định rằng một mục tiêu khác tồn tại.

Vì vậy, về mặt kỹ thuật, Eclipse cung cấp giao diện; kinda. Do đó, tôi tình cờ gặp qua các tệp makefile.init, makefile.defsmakefile.targets.

Process/Workflow:

  • Tạo một file makefile.targets trong thư mục gốc của dự án eclipse của bạn; Trong tập tin đã xác định một mục tiêu cài đặt bằng tay. Điều này - tất nhiên - cho phép bạn chỉ định từng chi tiết nhỏ như bạn muốn, nhưng với lợi ích bổ sung của tất cả cấu hình được cung cấp bởi Eclipse đã hoàn thành và có sẵn cho bạn để sử dụng với việc xác định các quy tắc cho mục tiêu đã chỉ định.

  • Sau khi xác định mục tiêu mới trong file makefile.targets, nhấn chuột phải vào tên dự án của bạn hoặc tập tin cpp chính trong Eclipse project explorer, và sau đó chọn Make Targets ->Build..., và cuối cùng Add để nhanh chóng một cửa sổ pop-up. Ngoài ra, bạn có thể chọn 'tạo' trong bước cuối cùng thay vì 'xây dựng' và nó sẽ cung cấp cùng một cửa sổ bật lên được yêu cầu cho phần tiếp theo. Thêm tên của mục tiêu mới của bạn và - để lại mọi thứ khác ở giá trị mặc định của họ - click ok

  • Nếu bạn chọn để thêm làm cho mục tiêu mới của kích chuột phải vào trong Project Explorer và chọn Đặt mục tiêu ->Tạo ..., sau thêm mục tiêu mới làm cho bạn sẽ được đưa trở lại cửa sổ bật lên đầu tiên do việc chọn Xây dựng .... Nếu không, hãy tìm đường đến số Make Targets ->Build.. cửa sổ bật lên ngay bây giờ. Chọn mục tiêu mong muốn và sau đó nhấp vào Build.

Xem qua các tệp makefiles được tạo tự động của Eclipse là một cách tuyệt vời để tìm hiểu cú pháp makefile và cấu trúc tổng thể, đồng thời sử dụng các điều kiện bao gồm và điều kiện nâng cao.

Dưới đây là một số phần của một ví dụ makefile, trong đó - ít nhất tôi hy vọng - sẽ chứng minh tự thiết lập thư mục đầu ra của một xây dựng:

prefix = /usr/local 
bindir = $(prefix)/bin 
sharedir = $(prefix)/share 
mandir = $(sharedir)/man 
man1dir = $(mandir)/man1 

... 
# Typical all target 
all: <binaryname> 

#Typical clean target 
clean: 
rm -f <binaryname> <objectname>.o 

# Target invokes all, then installs to specified locations 
install: all 
install <binaryname> $(DESTDIR)$(bindir) 
install -m 0644 <objectname>.1 $(DESTDIR)$(man1dir) 
1

Đến Project Properties -> C/C++ Xây dựng -> Cài đặt-> tab GCC C++ Linker
các mô hình dòng lệnh được hiển thị ở phía bên phải

${COMMAND} ${FLAGS} ${OUTPUT_FLAG}${OUTPUT_PREFIX} ${OUTPUT} ${INPUTS} 

Đặt trước ${OUTPUT}

${COMMAND} ${FLAGS} ${OUTPUT_FLAG}${OUTPUT_PREFIX} ${ProjDirPath}/bin/${OUTPUT} ${INPUTS} 

hoặc

${COMMAND} ${FLAGS} ${OUTPUT_FLAG}${OUTPUT_PREFIX} MyMainProject/path/bin/ ${INPUTS} 

Từ https://www.eclipse.org/forums/index.php?t=msg&th=207500&goto=665566&#msg_665566

1

Trong dự án của tôi giá trị mặc định xây dựng đường dẫn đến tên xây dựng cấu hình, vì vậy tôi có thể sử dụng một $ {ConfigName } macro để truy xuất đường dẫn xây dựng trong bước xây dựng sau:

${workspace_loc:/${ProjName}}/${ConfigName}/${BuildArtifactFileName} 

Sau đó, bạn có thể sao chép các tệp nhị phân đích vào thư mục nhị phân chung của mình hoặc thực hiện một việc khác trong thư mục xây dựng của cấu hình cụ thể đó.

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