如何添加 Makefile 的路径?

How can I add a path to a Makefile?

在 C++ 中,我有一个库路径,我知道在使用 CMakeLists.txt 文件构建时如何包含它,但我不知道如何在使用 Makefile 构建时包含它。

我尝试应用解决方案 asked and answered here,但没有用。 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
)

生成文件。我尝试使用 INC_DIRCFLAGSDEPS 来 link 库的路径,但出现错误。

COMMON=/O2 /MT /EHsc /arch:AVX /I../include /Fe../bin/
cl_vars = 'C:\Program Files\Microsoft Visual Studio22\Community\VC\Tools\MSVC.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

此行将一个值赋给名为 COMMON:

的 makefile 变量
COMMON=/O2 /MT /EHsc /arch:AVX /I../include /Fe../bin/

此行为 makefile 变量名赋值 cl_var:

cl_var = 'cl'

配方中的这些行 使用 (或“扩展”)变量 cl_varCOMMON:

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

(等等)

请注意,您从未在 makefile 中的任何地方使用 变量 cl_varsCFLAGSINC_DIRDEPS,所以那些变量赋值基本上是no-ops:没用。它们可能根本不存在,它们对您的 makefile 没有影响。

如果要将新目录添加到包含路径,则必须将其添加到 COMMON 变量,因为这是将要使用的变量。由于您使用的是 Visual C++,而不是 GCC 或 Clang 等 POSIX 编译器,因此语法是 /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 user's manual 之类的内容的介绍,以使自己对什么是 makefile 及其工作原理有一个基本的了解。 SO 不具备提供 full-fledged 教程的能力。