生成main.c和main.cpp的单个Makefile
Single Makefile to build both main.c and main.cpp
我希望make main-c
从main.c
构建main-c
。
CCD_ 4从CCD_ 6构建CCD_。
我有,都在同一个文件夹中:
main.c
:
#include <stdio.h>
int main(int argc, char const *argv[]) {
printf("This ic Cn");
}
main.cpp
:
#include <iostream>
int main(int argc, char const *argv[]) {
std::cout << "This is C++" << std::endl;
}
Makefile
:
CFLAGS = -std=gnu11
CXXFLAGS = -std=gnu++11
CPPFLAGS = -g -Wall -O3
LDFLAGS =
LDLIBS =
OBJS = main.o
APP-C = main-c
APP-CPP = main-cpp
default:
echo "Check README.txt"
main-c: $(OBJS)
$(CC) $^ $(LDLIBS) -o $@
main-cpp: $(OBJS)
$(CXX) $^ $(LDLIBS) -o $@
clean:
-rm -Rf *.o
distclean: clean
-rm -Rf $(APP-C) $(APP-CPP)
因此:
$ make main-c
cc -std=gnu11 -g -Wall -O3 -c -o main.o main.c
cc main.o -o main-c
但是(也是从.c
构建的(:
$ make main-cpp
cc -std=gnu11 -g -Wall -O3 -c -o main.o main.c
c++ main.o -o main-cpp
我期望make main-cpp
使用$(CXX) $^ $(LDLIBS) -o $@
并从.cpp
构建。我错过了什么?
我希望make main cpp使用$(CXX($^$(LDLIBS(-o$@并从.cpp.构建
确实如此。make main-cpp --debug
将帮助您了解发生了什么。
问题是,您依赖默认规则来生成main-cpp
和main-c
目标所需的main.o
,但在调用make-cpp
目标时,您需要不同的构建。在这种情况下,您需要定义不同的非默认规则来构建.o文件。如果您只是让make-cpp
和main-c
依赖于具有不同名称的.o,那么这是最简单的。由于它们是不同的构建,所以无论如何都应该有不同的名称:
CFLAGS = -std=gnu11
CXXFLAGS = -std=gnu++11
CPPFLAGS = -g -Wall -O3
LDFLAGS =
LDLIBS =
APP-C = main-c
APP-CPP = main-cpp
default:
echo "Check README.txt"
main-c: %:%.o
$(CC) $^ $(LDLIBS) -o $@
main-cpp: %:%.o
$(CXX) $^ $(LDLIBS) -o $@
main-cpp.o: main.cpp
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $? -o $@
main-c.o: main.c
$(CC) $(CPPFLAGS) $(CFLAGS) -c $? -o $@
clean:
-rm -Rf *.o
distclean: clean
-rm -Rf $(APP-C) $(APP-CPP)
main-c
和main-cpp
这两个规则都需要创建main.o
才能完成,但您没有创建main.o
的规则。
您正在使用make的隐式对象文件创建,这是从源文件创建".o"文件的内置规则。它可以使用".c"或".cpp/cc/c"文件,并将使用适当的变量进行构建。但是,由于您同时拥有main.c
和main.cpp
,因此看起来默认使用C版本。
您可能需要为每个规则创建明确的规则(并且可能使用不同的名称(。
相关文章:
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 代码在main()中运行,但在函数中出现错误
- 如何将一个ostringstream十六进制字符串字符对转换为单个unit8t等价的二进制值
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 函数是否可以访问传递给main()的参数
- 在main()之外初始化std::vector会导致性能下降(多线程)
- 我的 int main() 中出现堆栈溢出错误
- Eclipse CDT:单个项目中有多个C++文件
- C++变量名(可以将 main 声明为变量,但对于其他函数名称则不然)
- 当我尝试在 Main 中调用插入函数时,它不是取数字?
- 为什么我们将单个或多维数组的大小声明为常量值?
- C++调用具有 *this 属性的单个帮助程序函数
- File.cpp.o:OpenPose 标志 CMakeFiles/.. 的多重定义/main.cpp.o:首先在这里定
- 为什么类和 main() 函数中也有动态内存分配
- 在 main.cpp 的上下文中找不到目录(带有 CMake 的快板)
- 生成main.c和main.cpp的单个Makefile
- 多个main.cpp文件的单个make文件