C++ 如何正确使用文件GLOB?

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_

我正在尝试使用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_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文件。