Как я могу добавить путь к Makefile?

В C++ у меня есть путь к библиотеке, который я знаю, как включать его при сборке с помощью файла CMakeLists.txt, но я не знаю, как его включать при сборке с помощью Makefile.

Я попытался применить решение спросил и ответил здесь, но оно не сработало. Содержимое Makefile приведено ниже. Имя библиотеки — «NumCpp». Полный путь к этой библиотеке на моем компьютере: C:\Users\ooo\tor\Robot\rainbow\NumCpp\include\.
В файле .cc я включаю библиотеку как #include "NumCpp.hpp"

Это файл CMakeLists.txt. Это будет включать и компилировать библиотеку NumCpp, если вы запустите ее в каталоге, содержащем NumCpp. Я не знаю, полезно ли показывать это, но я знаю, что могу подключить библиотеку таким образом.

cmake_minimum_required(VERSION 3.14)

project("HelloWorld" CXX)

add_executable(${PROJECT_NAME} main.cpp)

find_package(NumCpp 2.6.2 REQUIRED)
target_link_libraries(${PROJECT_NAME}
    NumCpp::NumCpp
)

Makefile. Я пытался использовать INC_DIR, CFLAGS и DEPS, чтобы связать путь к библиотеке, но получаю сообщение об ошибке.

COMMON=/O2 /MT /EHsc /arch:AVX /I../include /Fe../bin/
cl_vars = 'C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.30.30705\bin\Hostx86\x86\cl.exe'
cl_var = 'cl'

INC_DIR = C:/Users/ooo/tor/Robot/rainbow/NumCpp/include/
CFLAGS=-c -Wall -I$(INC_DIR)
DEPS = NumCpp.hpp

all:
    $(cl_var) $(COMMON) testxml.cc                 ../bin/mujoco210nogl.lib
    $(cl_var) $(COMMON) testspeed.cc               ../bin/mujoco210nogl.lib
    $(cl_var) $(COMMON) compile.cc                 ../bin/mujoco210nogl.lib
    $(cl_var) $(COMMON) derivative.cc /openmp      ../bin/mujoco210nogl.lib
    $(cl_var) $(COMMON) basic.cc ../bin/glfw3.lib  ../bin/mujoco210.lib
    $(cl_var) $(COMMON) record.cc ../bin/glfw3.lib ../bin/mujoco210.lib
    $(cl_var) $(COMMON) simulate.cc ../include/uitools.c ../bin/glfw3.lib ../bin/mujoco210.lib
    del *.obj

Ошибка...

simulate.cc(14): fatal error C1083: Cannot open include file: 'NumCpp.hpp': No such file or directory
Generating Code...
Compiling...
uitools.c
Generating Code...
make: *** [Makefile:16: all] Error 2

Всегда используйте прямую косую черту в качестве разделителей каталогов в make-файлах, а не обратную косую черту. Кроме того, этот makefile довольно бесполезен. С тем же успехом вы можете просто написать пакетный файл .bat и поместить в него строки компиляции, тогда вам не нужно будет беспокоиться о обратной косой черте. Вы просто используете make-файл как прославленный пакетный файл и не пользуетесь преимуществами каких-либо вещей, которые делают make-файлы полезными, например, избегаете ненужной перекомпиляции и т. д.

MadScientist 22.03.2022 19:22

Хм. При ближайшем рассмотрении не похоже, что вы используете переменные CFLAGS, INC_DIR или DEPS вообще где-либо в вашем make-файле. Простое назначение этих переменных на самом деле ничего не делает, если вы не ссылаетесь на них где-то. Я полагаю, вы хотите использовать переменную COMMON, чтобы добавить включаемые пути.

MadScientist 22.03.2022 19:24

«использовать переменную COMMON». Я попробовал косую черту, и это не помогло. Мне просто написать COMMON, а затем путь? Там уже есть строка с использованием COMMON. Когда я добавил к нему свой путь, я получил... LINK : fatal error LNK1181: cannot open input file 'C:\Users\ooo\tor\Robot\rainbow\NumCpp\include\.obj'

user7914198 22.03.2022 19:27
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
59
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Эта строка присваивает значение переменной make-файла с именем COMMON:

COMMON=/O2 /MT /EHsc /arch:AVX /I../include /Fe../bin/

эта строка присваивает значение имени переменной make-файла cl_var:

cl_var = 'cl'

Эти строки в рецепте использовать (или "расширить") переменные cl_var и COMMON:

$(cl_var) $(COMMON) testxml.cc ../bin/mujoco210nogl.lib

(и т.д.)

Обратите внимание, что нигде в вашем make-файле вы никогда не использовать переменные cl_vars, CFLAGS, INC_DIR или DEPS, поэтому эти назначения переменных в основном бесполезны: бесполезны. С таким же успехом их может и не быть вовсе, они никак не влияют на ваш make-файл.

Если вы хотите добавить новый каталог в путь включения, вам нужно добавить его в переменную COMMON, потому что это переменная, которая будет использоваться. Поскольку вы используете Visual C++, а не компилятор POSIX, такой как GCC или Clang, синтаксис будет /I<path>, а не -I<path>.

Итак, вы должны попробовать что-то вроде этого:

INC_DIR = C:/Users/ooo/tor/Robot/rainbow/NumCpp/include/

COMMON = /O2 /MT /EHsc /arch:AVX /I../include /I$(INC_DIR) /Fe../bin/

Если вам нужна дополнительная информация, вам, вероятно, следует прочитать хотя бы введение в что-то вроде Руководство пользователя GNU make, чтобы получить общее представление о том, что такое make-файл и как он работает. SO не оборудована для предоставления полноценных руководств.

Другие вопросы по теме