使用主要功能将文件编译为特定的文件名,而不是“ a.out”

时间:2018-07-18 22:46:18

标签: c++11 makefile

我有main.cpp依赖的多个文件。我的main.cpp文件中包含int main() {...}。目前,我的编译main.cpp的命令如下所示:

g++ main.cpp src_file1.cpp src_file1.cpp header.h ...

这将生成a.out。我不想将此文件命名为a.out。我要控制主要可执行文件的文件名。我尝试使用此命令来这样做:

g++ main.cpp src_file1.cpp src_file1.cpp header.h ... -o main.out

但是,当我运行它时,出现错误:

error: cannot specify -o when generating multiple output files

我知道为什么会这样,但是我不知道如何解决。当然,我仍然希望g ++编译头文件和其他c ++文件,但是我希望将主文件main.cpp编译为main.out而不是a.out。我该怎么办?

相关的生成文件代码(如果需要):

SRC = block.cpp list.cpp blocker.cpp hasher.cpp header.h
CFLAGS = -g -Wall
CC = g++
STD = -std=c++11
ARGON = argon2/libargon2.a
TARGET = main.out

main: main.cpp $(SRC) argon2/argon2.h
  $(CC) main.cpp $(SRC) $(ARGON) $(CFLAGS) $(STD) $(TARGET)

1 个答案:

答案 0 :(得分:2)

不要将头文件传递给编译器,就好像它们是源文件一样。试试这个:

SRC = block.cpp list.cpp blocker.cpp hasher.cpp
ARGON = argon2/libargon2.a
TARGET = main.out

main: main.cpp $(SRC) argon2/argon2.h header.h
    $(CC) main.cpp $(SRC) $(ARGON) $(CFLAGS) $(STD) -o $(TARGET)