2013-02-13 54 views
6

Tôi có một makefile đơn giản gọi trình biên dịch C++ là $(CXX), được đặt trong tập lệnh ~/.profile của tôi. Netbeans dường như có trình quản lý chuỗi công cụ tinh vi, nhưng dường như giải quyết $CXX chỉ là c++ cho dù thế nào đi chăng nữa.Biến môi trường Netbeans cho C++ makefile

Làm cách nào tôi có thể đặt $CXX đúng cách hoặc có một biến khác do Netbeans đặt mà makefile của tôi có thể phát hiện không? (yuck)

Chỉnh sửa: nhấp chuột phải vào makefile trong trình điều hướng cho phép tôi chỉ định môi trường, mặc dù dường như chỉ có chỗ cho một dòng đầu vào. Chỉ định CXX=/usr/local/bin/g++ khắc phục sự cố, nhưng điều này là tối ưu.

+0

Bạn có thể chỉ định mỗi tùy chọn biên dịch tệp, vì vậy nếu bạn nhấp chuột phải vào tệp, bạn có thể chỉ định tệp đó dưới dạng tệp 'c' hoặc tệp' C++' ... Để chọn trình biên dịch, bạn cần tạo một bộ công cụ ' . – Mikhail

+0

@Mikhail Đây là một makefile tùy chỉnh, vì vậy Netbeans không thể làm bất cứ điều gì cho mỗi tập tin. – Potatoswatter

+0

Có thể bạn có thể thay đổi makefile của mình? Ngoài ra bạn thực hiện một lời gọi tùy chỉnh cho makefile, nhưng tôi nghĩ bạn cần phải chọn đúng 'toolset'. – Mikhail

Trả lời

3

Tôi sẽ chỉ mô tả những gì tôi thường làm khi tôi làm việc với C++ trong NetBeans. Đầu tiên, đối với mỗi dự án, tôi tạo một makefile đơn giản như sau:

MAIN = <my main target> 
CFLAGS = -g -std=c++0x 

include ${MAKELIBHOME}/MINGW32.inc 
include ${MAKELIBHOME}/WINDOWS.inc 

build: ${MAIN} 

clean:; rm -fr <files to remove> 

Biến môi trường MAKELIBHOME được đặt ngoài NetBeans. Thư mục $ {} MAKELIBHOME chứa một số bao gồm các file cho thực hiện, ví dụ như các tập tin MINGW32.inc trông như thế này:

CC = g++ 

CFLAGS += -W -DLITTLE_ENDIAN=1 
LDLIBS += -lws2_32 

.SUFFIXES: .o .c .cpp 

.c:  ;${CC} ${CFLAGS} ${LDFLAGS} $< -o latest ${LDLIBS} 
.cpp: ;${CC} ${CFLAGS} ${LDFLAGS} $< -o latest ${LDLIBS} 

.c.o: ;${CC} ${CFLAGS} -c $< 
.cpp.o: ;${CC} ${CFLAGS} -c $< 

Những inc-file là như nhau cho tất cả các dự án NetBeans. Không có đường dẫn tuyệt đối ở đây, do đó, việc tạo sẽ sử dụng biến PATH để định vị một bộ công cụ GCC, nhưng tất nhiên bạn có thể sử dụng đường dẫn tuyệt đối để chọn bộ công cụ bạn thích (hoặc bao gồm một tệp inc khác nhau - tôi thích cách này).

Tất cả điều này hoạt động trên máy Windows của tôi, nhưng cấu hình Linux trông rất giống nhau - tôi chỉ cần bao gồm một tập hợp các tệp khác vào tất cả các tệp makefiles chính của mình. Ngoài ra, thiết lập này cho phép tôi gọi thực hiện từ dòng lệnh.

Tôi hy vọng nó sẽ giúp, ~ AY

+0

Hmm, tôi đã bỏ lỡ điều này khi bạn đăng nó . Tôi không sử dụng NetBeans nữa, nhưng câu hỏi của tôi là "Biến môi trường' MAKELIBHOME' được đặt bên ngoài NetBeans. " * Bạn đã tạo biến môi trường bên ngoài như thế nào với NetBeans? Mặc dù, kể từ khi tôi đang trên Unix/OS X, nó có thể không dịch hơn. – Potatoswatter

+0

@Potatoswatter - 'make' có thể tham chiếu đến các biến môi trường trong cả Windows và Unix, và nó xảy ra bên ngoài NetBeans. BTW, tôi luôn sử dụng kiểu dự án NetBeans "C/C++ Project With Existing Sources", do đó, 'Makefile' của tôi hoàn toàn nằm dưới sự kiểm soát của tôi – HEKTO

+0

Vâng, như câu hỏi nói,' .profile' của tôi đã đặt '$ CXX' nhưng biến không có sẵn cho makefile. Chương trình gọi 'make' có trách nhiệm tạo môi trường, mặc dù đúng là các biến được truyền theo mặc định. – Potatoswatter

2

Đây là một bài cũ. Tuy nhiên tôi đã tìm thấy cùng một vấn đề gần đây và tôi đã tìm thấy một giải pháp thay thế dựa trên câu trả lời của @ HEKTO.

Tôi sử dụng PETSc, thư viện để giải quyết các hệ thống ma trận thưa thớt lớn. Hệ thống xây dựng của họ yêu cầu bạn sử dụng "include" trong makefile của bạn phụ thuộc vào hai biến môi trường: PETSC_DIR và PETSC_ARCH phải được đặt trong môi trường của bạn .... hoặc bạn có thể chuyển chúng thành các tùy chọn cho lệnh make của bạn !! Đây là những gì tôi đã làm.

Tôi đã makefile tạo ra bởi NetBeans và vào cuối tôi đã thêm tôi bao gồm:

include ${PETSC_DIR}/conf/variables 

Chú ý cách này phụ thuộc vào định nghĩa của PETSC_DIR. Ngoài ra điều này bao gồm sử dụng ồ ạt và PETSC_ARCH tất cả các nơi.

Vì vậy, trong NetBeans bây giờ tôi định cấu hình để chuyển các biến này thành: Công cụ-> Tùy chọn: Trong tab "Tùy chọn dự án", tôi điền vào hộp văn bản cho "Make Options" là: PETSC_DIR =/path/đến/petsc PETSC_ARCH = some-arch

Ngoài ra, bây giờ bạn có thể bắt đầu sử dụng các biến môi trường này (và các biến môi trường khác được xác định trong $ {PETSC_DIR}/conf/variables trong các tùy chọn dự án của bạn.Ví dụ: đối với các tệp bao gồm tôi (nhấp chuột phải vào dự án, sau đó nhấp vào "Thuộc tính"): Trong "Trình biên dịch C", "Bao gồm thư mục" tôi đặt: $ {PETSC_DIR}/bao gồm

Và dưới "Linker" , "Thư viện" tôi đặt: $ {PETSC_LIB} (được định nghĩa trong tệp bao gồm ở trên).

Bây giờ tôi có thể tạo và chạy dự án của mình từ bên trong NetBeans. Nếu phiên bản PETSc của tôi thay đổi, tôi chỉ cần thay đổi định nghĩa của các biến được truyền để thực hiện và mọi thứ khác được giải quyết.

Tôi hy vọng điều này có thể giúp ai đó. Nó chắc chắn làm việc cho tôi. Và phần tốt đẹp là tôi có thể đưa mã của mình cho người khác và họ có thể biên dịch từ dòng lệnh bằng cách sử dụng "make" như bình thường (không có NetBeans) và xác định các biến môi trường ở trên. Việc biên dịch bây giờ không có bất kỳ đường dẫn mã hóa cứng nào.

1

Tôi gặp sự cố rất giống với linux, nơi Netbeans không lấy các biến môi trường từ bash.

Giải pháp: bắt đầu netbeans từ bash.

Tôi không chắc những gì tương đương là trên Mac, nhưng ý tưởng rất đơn giản: bắt đầu Netbeans từ một thiết bị đầu cuối có các biến môi trường phù hợp đã được thiết lập.

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