如何添加 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_DIR
、CFLAGS
和 DEPS
来 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_var
和 COMMON
:
$(cl_var) $(COMMON) testxml.cc ../bin/mujoco210nogl.lib
(等等)
请注意,您从未在 makefile 中的任何地方使用 变量 cl_vars
、CFLAGS
、INC_DIR
或 DEPS
,所以那些变量赋值基本上是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 教程的能力。
在 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_DIR
、CFLAGS
和 DEPS
来 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
:
COMMON=/O2 /MT /EHsc /arch:AVX /I../include /Fe../bin/
此行为 makefile 变量名赋值 cl_var
:
cl_var = 'cl'
配方中的这些行 使用 (或“扩展”)变量 cl_var
和 COMMON
:
$(cl_var) $(COMMON) testxml.cc ../bin/mujoco210nogl.lib
(等等)
请注意,您从未在 makefile 中的任何地方使用 变量 cl_vars
、CFLAGS
、INC_DIR
或 DEPS
,所以那些变量赋值基本上是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 教程的能力。