如何在 c c ++ 混合生成文件中为 c 对象添加附加规则?

How to add an additional rule for c objects in a c c++ mixed makefile?

本文关键字:添加 对象 规则 文件 混合      更新时间:2023-10-16

我在Windows机器上的C ++代码库中添加了一些C代码;它在Windows Visual Studio上运行得很好;但是我很难让它在Linux上运行。

下面的文件是使用生成文件运行的 subdir.mk。 我正在 linux64 系统上编辑这个为纯 c++ 编写的文件,以添加我的 c 更改。我添加了 cc 源,如下所示。我是新手。我听说如果你有标志,知道如何构建,但现有文件有这个规则%.o:.。/%.cpp 没有它它就无法工作。我尝试添加%.o:.。/%.c 以不同的方式(使用 ,然后通过管道(,但没有成功。

你看到我在这里做错了什么吗?欢迎任何反馈。感谢!

CC=gcc
CXX=g++
CXXFLAGS=-Wall -g
CCFLAGS=-g
# Add inputs and outputs from these tool invocations to the build variables
CPP_SRCS += 
../x.cpp 
../y.cpp 
../main.cpp
CC_SRCS += 
../z__c.c
OBJS += 
./x.o 
./y.o 
./z__c.o 
./main.o
CPP_DEPS += 
./x.d 
./y.d 
./main.d
icpc='/opt/shared/sw/x86_64-unknown-linux-gnu/gcc/5.3.0-rhel6/bin/g++'
CC='/opt/shared/sw/x86_64-unknown-linux-gnu/gcc/5.3.0-rhel6/bin/gcc'
# Each subdirectory must supply rules for building sources it contributes
%.o: ../%.cpp
#%.o: ../%.c

@echo 'Building file: $<'
@echo 'Invoking: G++ Compiler'
g++ -Wall -mavx -g -O -O1 -std=c++11 -L/opt/shared/sw/x86_64-unknown-linux-gnu/gcc/5.3.0-rhel6/lib64 -libstdc -libsupc++ -libtsan -libubsan -libvtv -libquadmath -libgcc_s -libgcj  -L/opt/intel/composer_xe_2013.5.192/mkl/lib/intel64 -lmkl_mc -lmkl_sequential -lmkl_gf_ilp64 -lmkl_avx -lmkl_lapack95_lp64 -lmkl_intel_lp64 -lmkl_core -lmkl_gnu_thread -L/home../oed -liboed -liboedlib -I/opt/intel/composer_xe_2013.5.192/mkl/include  
-I/opt/shared/sw/x86_64-unknown-linux-gnu/gcc/5.3.0-rhel6/include -I/home..include -I/home../debug  -DDEBUG -DMKL_ILP64
-MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -c -o "$@" "$<"
@echo 'Finished building: $<'
@echo ' '

你不想要这样的东西吗?

CC=gcc
CXX=g++
CXXFLAGS=-Wall -g
CCFLAGS=-g
# Add inputs and outputs from these tool invocations to the build variables
CPP_SRCS += 
../x.cpp 
../y.cpp 
../main.cpp
CC_SRCS += 
../z__c.c
OBJS += 
./x.o 
./y.o 
./z__c.o 
./main.o
CPP_DEPS += 
./x.d 
./y.d 
./main.d
icpc='/opt/shared/sw/x86_64-unknown-linux-gnu/gcc/5.3.0-rhel6/bin/g++'
CC='/opt/shared/sw/x86_64-unknown-linux-gnu/gcc/5.3.0-rhel6/bin/gcc'
# Each subdirectory must supply rules for building sources it contributes
%.o: ../%.cpp
@echo 'Building file: $<'
@echo 'Invoking: G++ Compiler'
g++ -Wall -mavx -g -O -O1 -std=c++11 -L/opt/shared/sw/x86_64-unknown-linux-gnu/gcc/5.3.0-rhel6/lib64 -libstdc -libsupc++ -libtsan -libubsan -libvtv -libquadmath -libgcc_s -libgcj  -L/opt/intel/composer_xe_2013.5.192/mkl/lib/intel64 -lmkl_mc -lmkl_sequential -lmkl_gf_ilp64 -lmkl_avx -lmkl_lapack95_lp64 -lmkl_intel_lp64 -lmkl_core -lmkl_gnu_thread -L/home../oed -liboed -liboedlib -I/opt/intel/composer_xe_2013.5.192/mkl/include  
-I/opt/shared/sw/x86_64-unknown-linux-gnu/gcc/5.3.0-rhel6/include -I/home..include -I/home../debug  -DDEBUG -DMKL_ILP64
-MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -c -o "$@" "$<"
@echo 'Finished building: $<'
@echo ' '
%.o: ../%.c
@echo 'Building file: $<'
@echo 'Invoking: GCC Compiler'
gcc -Wall -mavx -g -O -O1 -L/opt/shared/sw/x86_64-unknown-linux-gnu/gcc/5.3.0-rhel6/lib64 -libstdc -libsupc++ -libtsan -libubsan -libvtv -libquadmath -libgcc_s -libgcj  -L/opt/intel/composer_xe_2013.5.192/mkl/lib/intel64 -lmkl_mc -lmkl_sequential -lmkl_gf_ilp64 -lmkl_avx -lmkl_lapack95_lp64 -lmkl_intel_lp64 -lmkl_core -lmkl_gnu_thread -L/home../oed -liboed -liboedlib -I/opt/intel/composer_xe_2013.5.192/mkl/include  
-I/opt/shared/sw/x86_64-unknown-linux-gnu/gcc/5.3.0-rhel6/include -I/home..include -I/home../debug  -DDEBUG -DMKL_ILP64
-MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -c -o "$@" "$<"
@echo 'Finished building: $<'
@echo ' '