C++ 如何正确使用文件GLOB?
我正在尝试使用GLOB_RECURSE来指定我的源文件和头文件。目前,静态库的mycmakelists.txt为:C++ 如何正确使用文件GLOB?,c++,makefile,cmake,C++,Makefile,Cmake,我正在尝试使用GLOB_RECURSE来指定我的源文件和头文件。目前,静态库的mycmakelists.txt为: project(LinearSystemLib) file(GLOB_RECURSE ${PROJECT_NAME}_headers ${PROJECT_SOURCE_DIR}/*.h) file(GLOB_RECURSE ${PROJECT_NAME}_sources ${PROJECT_SOURCE_DIR}/*.cpp) add_library( ${PROJECT_
project(LinearSystemLib)
file(GLOB_RECURSE ${PROJECT_NAME}_headers ${PROJECT_SOURCE_DIR}/*.h)
file(GLOB_RECURSE ${PROJECT_NAME}_sources ${PROJECT_SOURCE_DIR}/*.cpp)
add_library(
${PROJECT_NAME} STATIC ${${PROJECT_NAME}_headers}
${${PROJECT_NAME}_sources}
)
install(
TARGETS ${PROJECT_NAME}
LIBRARY DESTINATION libs
ARCHIVE DESTINATION archives
)
库目录如下所示:
LinearSystemLib
CMakeLists.txt
source
LinearSystemLib.cpp
include
LinearSystemLib.h
当我运行命令cmake-G“Unix Makefiles”-DCMAKE\u BUILD\u TYPE=Debug
(在BUILD目录中)一切正常。但是,命令make
会显示以下内容:
/home/felipe/Documents/Dados/SINMEC/Eclipse/LinearSystemLib/source/LinearSystemLib.cpp:1:29: fatal error: LinearSystemLib.h: No such file or directory
我的CMakeLists错了吗?我不想设置按名称指定源文件和头文件。我发现关于glob_的信息不容易重现
我可以通过按名称列出源文件和头文件来实现。但是,它必须使用glob_递归或glob来完成 您需要添加
target_include_directories(${PROJECT_NAME} PUBLIC ${PROJECT_SOURCE_DIR})
因此,正确的
-I
参数将添加到编译步骤中。使用make VERBOSE=1
查看make执行的确切命令。我解决了我的问题,以下是LinearSystemLib目录的外观:
LinearSystemLib
CMakeLists.txt
source
LinearSystemLib.cpp
include
LinearSystemLib.h
CMakeLists.txt包含:
project(LinearSystemLib)
#INCLUDE DIRECTORIES
include_directories(${CMAKE_SOURCE_DIR}/${PROJECT_NAME}/include)
#SEARCH FOR .CPP AND .H FILES
file(GLOB ${PROJECT_NAME}_headers ${CMAKE_SOURCE_DIR}/${PROJECT_NAME}/include/*.h)
file(GLOB ${PROJECT_NAME}_sources ${CMAKE_SOURCE_DIR}/${PROJECT_NAME}/source/*.cpp)
#ADD LIBRARY
add_library(${PROJECT_NAME} STATIC ${${PROJECT_NAME}_sources})
#DEFINE OUTPUT LOCATION
install(
TARGETS ${PROJECT_NAME}
ARCHIVE DESTINATION static_libs
)
实际上,您不需要使用GLOB添加.h/.hpp文件。我这样做是因为否则,VisualStudio(或代码块)不会在“项目”菜单上创建“头文件”文件夹
我没有正确指定GLOB查找文件的路径
${CMAKE_SOURCE_DIR}/${PROJECT_NAME}/source/
请不要在你的问题标题中添加“已解决”这样的词,因为这会使它不再是一个问题。如果答案解决了你的问题,请将其标记为已接受。您好。我试图包括,但我得到了同样的错误。您是否有可以共享的CMakeLists.txt文件?我没有一个可以正确生成代码的文件。如果运行
make VERBOSE=1
,这将有助于您了解正在使用的-I
参数以及如何调整目标包含目录
命令,使其正常工作。如果没有,您需要将您的代码发布到某个地方,以便有人可以查看它并查看到底出了什么问题。请详细说明为什么需要源
子目录中的附加CMakeLists.txt
文件?我似乎与众不同。您可以在主CMakeLists.txt文件中添加一个include\u目录(include)
调用。相对路径是足够的,CMake将自动前缀。您好,我有几个包括在这个项目的目录。我不知道你的建议是否仍然适用。实际上,没有必要在源子目录中使用CMakeLists.txt。在项目目录中只需一个.txt文件。