【发布时间】:2017-07-18 20:39:07
【问题描述】:
我在 Windows 机器上将一些 c 代码添加到 c++ 代码库中;它在 Windows Visual Studio 上运行良好;但我很难让它在 linux 上运行。
下面的文件是一个使用makefile 运行的subdir.mk。 我正在编辑这个在 linux64 系统上为纯 c++ 编写的文件,以添加我的 c 更改。我添加了 cc 来源,如下所示。我是新来的。我听说如果你有标志 make 知道如何构建,但现有文件有这个规则 %.o: ../%.cpp ,没有它它就无法工作。我尝试以不同的方式添加 %.o: ../%.c (使用 a ,然后通过管道),但没有成功。
你看到我在这里做错了吗?欢迎任何反馈。谢谢!
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 ' '
【问题讨论】:
-
会不会是
./x.d后面的空行? -
你在哪里学习如何编写 makefile?
-
我正在阅读 GNU make 手册——这并不容易理解,但这不是我最初写的。它似乎是由 eclipse 生成的,我只是在编辑以使代码的更改在这个环境(linux)上工作。
-
我注意到
../%.cpp。我认为这有点复杂。您可能想阅读How to place object files in separate subdirectory -
实际上 GNU make 手册是技术写作的最佳示例之一 - 您的问题是尝试使用 eclipse 进行 C++ 编程,或者其他任何东西。