Создание двоичных файлов с использованием макросов внутри исходного файла

#c #g #window

#c #g #окно

Вопрос:

Я пытаюсь сгенерировать выходной файл с помощью макроса в исходном файле. Каким бы ни было имя макроса, сгенерируйте конечный EXE-файл, используя имя макроса.

 #include <iostream>

#define Apple
//#define Banana
//#define Mango

int main()
{
...
}
  

Как я мог бы сгенерировать имя выходного файла, например Apple.exe ?

компилятор: g ОС: Windows

Комментарии:

1. Вы не можете. Выходное имя определяется вызовом компоновщика. Для чего вам это нужно?

2. У меня есть несколько графических интерфейсов внутри main.cpp файл, который будет создан с использованием имени макроса. Я хочу иметь отдельные сборки и, в свою очередь, отдельный .exe для каждого макроса.

3.Разве это не просто вопрос установки имени макроса при создании соответствующей вещи? например g -o Banana main.cpp -DNAME=Banana g -o Apple main.cpp -DNAME=Apple

4. хм, я думаю, это правильно

Ответ №1:

Вы не можете управлять именем конечных артефактов компоновщика (в вашем случае исполняемого файла) из исходного кода.
Это должно быть сделано с использованием флага -o <filename> компоновщика, таким образом, в вашем случае

 > g   -o Banana.exe main.cpp -DNAME=Banana
  

Чтобы упростить управление этим, вы можете определить их как переменные в makefile, например, как

 # Comment the current, and uncomment a different definiton to change the executables
# name and the macro definition for NAME
FINAL_NAME = Banana
# FINAL_NAME = Apple
# FINAL_NAME = Mango

$(FINAL_NAME).exe : main.cpp
        g   -o $(FINAL_NAME).exe main.cpp -DNAME=$(FINAL_NAME)