C / C ++ - программно найти путь к файлу Makefile - PullRequest
0 голосов
/ 20 декабря 2011

Я пытаюсь прочитать " Makefile " в C / C ++

, он работает следующим образом: system("make -C /Users/MyNAME/Desktop/Folder flash");

" make flash"- это команда для запуска файла, а / Users / MyNAME / Desktop / Folder - это путь к файлу

.Этот код работает, но как я могу сделать путь к файлу локально, чтобы читать из той же папки отладки

(где находится программа), не записывая ее вручную?

Ответы [ 3 ]

4 голосов
/ 20 декабря 2011

Возможно, вам нужна функция int chdir(const char *path);. Пример:

#include <unistd.h>

/* ... */

chdir("/Users/MyNAME/Desktop/Folder");
system("make flash");

В <unistd.h> есть много других полезных функций, которые должны присутствовать в любой системе на основе POSIX. Проверьте здесь для большого списка.

РЕДАКТИРОВАТЬ: Если путь не постоянен, вы, вероятно, захотите предоставить его в качестве аргумента командной строки для вашей программы:

#include <unistd.h>
#include <stdio.h>

/* ... */

int main(int argc, char* argv[])
{
    if(argc < 2)
    {
        fprintf(stderr, "Usage: %s <path>\n", argv[0]);
        return 1;
    }

    chdir(argv[1]);
    system("make flash");

    /* ... */

    return 0;
}

Запустите его с помощью строки вроде ./foo /Users/MyNAME/Desktop/Folder.

1 голос
/ 20 декабря 2011

Вы можете использовать getcwd(), чтобы получить текущий рабочий каталог:

char cmd[1040];
char cwd[1024];
if (getcwd(cwd, sizeof(cwd)) != NULL)
{
   snprintf(cmd, sizeof(cmd), "make -C \"%s\" flash", cwd);
   system(cmd);
}
0 голосов
/ 20 декабря 2011

Хм, пропустите путь?

make flash

сделает make, а make будет смотреть в текущем рабочем каталоге.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...