2012-03-03 32 views
6

Tôi đang cố gắng sử dụng AsmJit trong một dự án. Đây là makefile Tôi đã sử dụng:gcc -D tùy chọn không làm những gì tôi nghĩ rằng nó sẽ

CC = g++ 
CFLAGS = -D ASMJIT_API -I dep/ 

test: src/main.cpp 
     $(CC) $(CFLAGS) src/main.cpp -o test.exe 

tôi đã nhận lỗi biên dịch khi cố gắng này, vì vậy thay vào đó tôi uncomment dòng #define ASMJIT_API từ dep/AsmJit/config.h, và loại bỏ các chuyển đổi -D từ makefile và mọi thứ được biên dịch một cách rõ ràng. Tôi đang sử dụng gcc 4.5.3. Bất kỳ ý tưởng?

Cảm ơn.

EDIT: Trình biên dịch lỗi

g++ -DASMJIT_API -Idep/ src/main.cpp -o test.exe 
In file included from dep/AsmJit/Assembler.h:31:0, 
       from src/main.cpp:1: 
dep/AsmJit/Build.h:274:1: error: expected unqualified-id before numeric constant 
In file included from dep/AsmJit/AssemblerX86X64.h:36:0, 
       from dep/AsmJit/Assembler.h:51, 
       from src/main.cpp:1: 
dep/AsmJit/Defs.h:408:1: error: expected unqualified-id before numeric constant 
In file included from dep/AsmJit/DefsX86X64.h:36:0, 
       from dep/AsmJit/Defs.h:423, 
       from dep/AsmJit/AssemblerX86X64.h:36, 
       from dep/AsmJit/Assembler.h:51, 
       from src/main.cpp:1: 
dep/AsmJit/Util.h:412:8: error: expected identifier before numeric constant 
dep/AsmJit/Util.h:412:8: error: expected unqualified-id before numeric constant 
src/main.cpp:6:1: error: expected ‘}’ at end of input 
makefile:5: recipe for target `test' failed 
make: *** [test] Error 1 
+0

Bạn gặp phải lỗi trình biên dịch nào? – mizo

+0

Về cơ bản các lỗi trỏ đến thực tế là một cái gì đó không được xác định chính xác. Khi #define ASMJIT_API được đặt, những định nghĩa khác hoạt động như dự định. Tôi sẽ chỉnh sửa bài đăng của mình để bao gồm chúng nếu chúng giúp ích gì cả. – flumpb

+0

có, điều đó sẽ hữu ích nếu bạn đăng thêm mã. – selbie

Trả lời

6

Có sự khác biệt giữa #define ASMJIT_API-DASMJIT_API.

Tuyên bố #define xác định ASMJIT_API là không có gì, trong khi the -D flag defines the preprocessor constant as 1.

Sử dụng -D cờ, dòng 274 của build.h mở rộng để

1 void assertionFailure(const char* file, int line, const char* exp); 

gây ra lỗi biên dịch.

+1

OMG, cảm ơn bạn! Tôi đã thay thế -D ASMJIT_API bằng -D ASMJIT_API = – flumpb

0

Đừng chèn một khoảng trống giữa -D và ASMJIT_API. Ditto for -I

CFLAGS = -DASMJIT_API -Idep/ 

Có bạn.

+0

@kisplit - Khi bạn gõ "make test", bạn có thấy -DASMJIT_API như là một phần của dòng lệnh được tạo không? – selbie

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