系统是solaris 10
-bash-3.00$ make s1
make: Fatal error: Don't know how to make target `s1.o'
由于make s1的提示不在清楚,于由就用proc编释一下,出现在以下提示信息。
-bash-3.00$ proc iname = s1.pc oname = s1.c Pro*C/C++: Release 10.2.0.2.0 - Production on Fri Mar 13 15:58:44 2009Copyright (c) 1982, 2005, Oracle.  All rights reserved.System default option values taken from: /export/home/oracle/product/10g/precomp/admin/pcscfg.cfgPCC-F-02044, CMD-LINE:  Illegal or out of range value for option:  s1.c不知道哪里出错了,下面是代码:
 1 #include <stdio.h>
 2 #include <strings.h>
 3 #define UNAME_LEN    20
 4 #define PWD_LEN      40
 5 varchar username[UNAME_LEN];
 6 varchar password[PWD_LEN];
 7 struct
 8 {
 9     varchar emp_name[UNAME_LEN];
10     float   salary;
11     float   commission;
12 }emprec;
13 struc
14 {
15     short emp_name_ind;
16     short sal_ind;
17     short comm_ind;
18 }emprec_ind;
19 int emp_number;
20 int total_queried;
21 #include <sqlca.h>
22 void sql_error(char *);
23 void main(void)
24 {
25     char temp_char[32];
26     strncpy( (char *)username.arr,"scdb",UNAME_LEN);
27     username.len = strlen( (char *)username.arr );
28     strncpy( (char *)password.arr,"scdb",PWD_LEN);
29     password.len = strlen( (char *)password.arr );
30     EXEC SQL WHENEVER SQLERROR DO sql_error("Oracle error --\n");
31     EXEC SQL CONNECT :username INDENTIFIED BY :password;
32     /*
33     printf("\nConnected to Oracle as user:%s\n",username.arr);
34     total_queried = 0;
35     for(;;)
36     {
37         EXEC SQL WHENEVER NOT FOUND DO break;
38         for(;;)
39         {
40             emp_number = 0;
41             printf("\nEnter employee number(0 to quit):");
42             gets(temp_char);
43             emp_number = atoi( temp_char );
44             if( emp_number == 0 )
45             {
46                 break;
47             }//End if;
48             EXEC SQL select ename,sal,nvl(comm,0)
49                 INTO :emprec INDICATOR :emprec_ind
50                 FROM emp
51                 where empno = :emp_number;
52             printf("\n\nEmployee\tSalary\t\tCommission\n");
53             printf("----------\t------\t\t----------\n");
54             emprec.emp_name.arr[emprec.emp_name.len] = '\0\';
55             printf("%-8s\t%6.2f\t\t,emprec.emp_name.arr,emprec.salary);
56             if( emprec_ind.comm_ind == -1 )
57             {
58                 printf("NULL\n");
59             }
60             else
61             {
62                 printf("6.2f\n",emprec.commission);
63             }
64             total_queried++;
65         }
66         if( emp_number == 0 )
67         {
68             break;
69         }
70         printf("\nNot a valid employee number -try again.\n");
71     }
72     printf("\t\tTotal rows returned was %d.\n",total_queried);
73     printf("\nG'day.\n\n\n");
74     EXEC SQL COMMIT WORK RELEASE;
75     exit(0);
76 }
77 void sql_error(char *msg)
78 {
79     char err_msg[128];
80     int buf_len,msg_len;
81     EXEC SQL WHENEVER SQLERROR CONTINUE;
82     printf("\n%s\n",msg);
83     buf_len = sizeof( err_msg );
84     sqlglm(err_msg,&buf_len,&msg_len );
85     printf("%.*s\n",msg_len,err_msg );
86     EXEC SQL ROLLBACK RELEASE;
87     exit(1);
88 }//End sql_error;
我的makefile内容如下:
 1 include $(ORACLE_HOME)/rdbms/lib/env_rdbms.mk
 2
 3 ORAINC=${ORACLE_HOME}/precomp/public
 4 ORALIB=${ORACLE_HOME}/lib
 5
 6 PROC=proc
 7 CC = gcc -ggdb3 -Wall
 8 PROCPPFLAGS = \
 9     userid = scdb/scdb \
10     sqlcheck = semantisc \
11     include = ${ORACLE_HOME}/rdbms/public \
12     include = $(ORAINC) \
13     lines = true \
14     parse = full
15
16 CFLAGS= -I $(ORAINC) -I ${ORACLE_HOME}/rdbms/public
17
18 .SUFFIXES: .o .c .pc
19 .pc .c:
20     @$(PROC) $(PROCPPFLAGS) iname = $<
21 .c .o:
22     @$(CC) $(CFLAGS) -c $<
23 .pc .o:
24     @$(PROC) $(PROCPPFLAGS) iname = $<
25     @$(CC) $(CFLAGS) -c $(<:.pc=.c)
26
28 OBJ=s1.o
29 s1:$(OBJ)
30     @$(CC) $(CFLAGS) $(OBJ) -o s1 -L ${ORACLE_HOME}/lib $(PROLDLIBS) -lm
31     @rm -f $(OBJ)
32     @rm -f *.lis
33 all:
34     @make sqlvcp