У меня проблемы с переносом библиотеки C ++ в Windows Phone через командную строку с nmake
, Makefile вызывает cl.exe
а также link.exe
используя Visual Studio x86_arm
инструменты и имеет основные рецепты.
Я использую проект Visual Studio Phone в качестве ссылки. Под Монитор процесса, Я заметил, что Visual Studio использует файл ответов, а не управляет компилятором напрямую. То есть Visual Studio вызывать cl.exe <response file>
,
Согласно Параметры компилятора, Файлы ответов ( @
опция):
Файл ответов может содержать любые команды, которые вы указали бы в
командная строка. Это может быть полезно, если ваши аргументы командной строки превышают
127 символов.
Это может быть моей проблемой с портом, так как моя командная строка содержит более 500 символов (7+ строк с переносом в консоли).
Visual Studio использует временный файл ответов, записанный в AppData
файл, который немедленно удаляется. Я хочу проверить файл ответов Visual Studio и попробовать его использовать.
Вопрос: Как я могу захватить или проверить файл ответов Visual Studio?
Мои проекты VS, кажется, не используют файлы ответов (возможно, проекты слишком малы?), Однако получают nmake
сгенерировать и использовать файл ответов довольно просто, используя встроенные файлы nmake. Ниже приведен простой make-файл, который скомпилирует hello.c
используя файл ответов на cl
командная строка:
PROJNAME=hello
all:
cl @<<
-c $(PROJNAME).c
-Ox
<<
В основном, положить <<
на команду, которой вы хотите передать inline, затем после команды просто поместите содержимое файла и завершите встроенный файл другим <<
маркер как разделитель.
Бег nmake
на этом makefile результат:
C:\temp>nmake
Microsoft (R) Program Maintenance Utility Version 10.00.30319.01
Copyright (C) Microsoft Corporation. All rights reserved.
cl @C:\Users\mikeb\AppData\Local\Temp\nmAC77.tmp
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.40219.01 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
cl -c hello.c
-Ox
hello.c
Вы можете видеть, что макросы nmake раскрываются во встроенном файле.
Увидеть Документы MSDN для получения более подробной информации (хотя документы довольно скудны — они могут использовать пример или два).
Обновить:
И если вы действительно хотите или вам нужно захватить файл ответов, который использует VS, и не можете найти другой способ сделать это, скомпилируйте следующую программу и замените программу, например, на VS, которая работает cl.exe
, с ним (очевидно, где-то спрятать оригинальный файл программы, чтобы вы могли отменить операцию):
#include <stdio.h>
void dump(char const* fname)
{
FILE* fp = NULL;
char buf[1000];
char* result = NULL;
printf("Dumping response file \"%s\":\n\n", fname);
fp = fopen(fname, "r");
if (!fp) return;
do {
result = fgets(buf, sizeof(buf), fp);
if (result) printf("%s", buf);
} while (result);
return;
}int main(int argc, char** argv)
{
int i;
for (i = 1; i < argc; ++i) {
char* fname;
if (argv[i][0] != '@') {
// not a response file
continue;
}
fname = &(argv[i][1]);
dump(fname);
}
return 0;
}
Вы можете запретить удаление файлов .rsp, установив переменную окружения MSBUILDPRESERVETOOLTEMPFILES
в 1
,