让我说我有这些文件:
main.cpp
,ClassA.cpp
,ClassA.h
,ClassB.cpp
,ClassB.h
#include "ClassA.h"
和#include "ClassB.h"
,每个.cpp
文件都包含其各自的.h
文件。这是对的吗?现在我正在使用g++ *.cpp
进行编译,然后我获得了一个可执行文件a.exe
(Windows)
P.S我不熟悉制作,也不想使用它,所以请不要在答案中参考,我读Using G++ to compile multiple .cpp and .h files但我需要更多解释我的问题。
答案 0 :(得分:2)
我的问题是,这是正确的方法吗?
最好创建makefile
并使用make
来构建目标。
让我们说如果我只在一个文件(cpp或h)中进行更改,这个命令也会重新编译未更改的文件(因为我看到除了a.exe之外文件夹中没有新文件)?
是
请解释一下。另外我该怎么做呢?
使用make
。 make
将帮助跟踪依赖关系并编译需要编译的文件,或者通常构建过时的目标。
答案 1 :(得分:2)
如果您想手动执行此操作,可以将所有.cpp文件编译为目标文件
g++ -c *.cpp
并链接所有目标文件
g++ *.o -o a.out
如果更改了ClassA.cpp,则可以重新编译ClassA.cpp
g++ -c ClassA.cpp
再次链接它们
g++ *.o -o a.out
至少,您不需要重新编译未更改的.cpp文件。
答案 2 :(得分:1)
对于#include,你是对的。确保你有包含警戒,以便他们的内容只包含一次。
#ifndef CLASS_A_H
#define CLASS_A_H
class classA
{
};
#endif
你可以指定-o到g ++来命名输出文件而不是' a.exe'
通常使用gcc / g ++和其他命令行编译器,策略是首先编译源文件,然后将它们与另一个命令链接。这有助于防止每次都重新编译未修改的文件。这使用了gcc
的-c开关试试这个
g++ -c ClassA.cpp -o ClassA.o
g++ -c ClassB.cpp -o ClassB.o
g++ -c main.cpp -o main.o
g++ ClassA.o ClassB.o main.o -o myProgram.exe
答案 3 :(得分:0)
你应该为此目的使用cmake
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
project(cmake_demo)
File(GLOB SRC_FILES src/*.cpp)
message(src: ${SRC_FILES})
add_executable(cmake_demo ${SRC_FILES})
它应该按照你想要的方式编译和工作:)
你的文件夹结构应该是这样的
CMakeLists.txt
src
build
希望会有所帮助:)