2016-11-05 28 views
-3

我正在尝试使用GLOB_RECURSE来指定我的源文件和头文件。目前,我的静态库的CMakeLists.txt是:如何正确使用文件GLOB?

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_BUILD_TYPE=Debug(build目录),一切都OK。然而,命令make它显示以下内容:

/home/felipe/Documents/Dados/SINMEC/Eclipse/LinearSystemLib/source/LinearSystemLib.cpp:1:29: fatal error: LinearSystemLib.h: No such file or directory 

我的CMakeLists错了吗?我不想按名称指定源文件和头文件。我没有找到有关glob_recurse的信息。

我可以通过名称列出源文件和头文件使其工作。但是,它必须使用glob_recurse或glob来完成。

+3

的可能的复制[如何正确添加包括与CMake的目录?(http://stackoverflow.com/questions/13703647/how-to-properly-add-include-directories-with-cmake) –

+0

请参阅[CMake/Examples:将递归目录添加到INCLUDE_DIRECTORIES](http://www.vtk.org/Wiki/CMake/Examples#Recursively_add_subdirectories_to_INCLUDE_DIRECTORIES) – Florian

+0

请不要在您的问题标题中添加“已解决”等字样,因为这会使它不再是一个问题。如果答案已解决您的问题,请将其标记为已接受。 –

回答

1

我解决我的问题,这里就是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 
) 

你实际上并不需要添加.H/.HPP使用GLOB的文件。我这样做是因为否则,Visual Studio(或CodeBlocks)不会在项目菜单上创建“头文件”文件夹。

我没有正确指定GLOB可以找到文件的路径。

${CMAKE_SOURCE_DIR}/${PROJECT_NAME}/source/ 
+0

您能详细说明为什么您需要''source'子目录中额外的'CMakeLists.txt'文件吗?我似乎不寻常。你可以在主CMakeLists.txt文件中添加一个'include_directories(include)'调用。相对路径已足够,CMake会自动在['CMAKE_CURRENT_SOURCE_DIR'](https://cmake.org/cmake/help/latest/variable/CMAKE_CURRENT_SOURCE_DIR.html)前缀。 – Florian

+0

你好,我在这个项目中有几个include目录。我不知道你的建议是否仍然适用。 –

+0

实际上,源子目录中不需要CMakeLists.txt。你可以只有一个。txt文件在项目目录中。 –

0

您需要添加

target_include_directories(${PROJECT_NAME} PUBLIC ${PROJECT_SOURCE_DIR}) 

所以正确-I参数添加到您的编译步骤。使用make VERBOSE=1来查看正在执行的命令。

+0

你好。我试图包括,但是我得到了同样的错误。你可以分享CMakeLists.txt文件吗? –

+0

我没有一个能够正确构建您的代码。如果你运行''make VERBOSE = 1'',这应该会帮助你看到正在使用什么''-I''参数,以及如何调整''target_include_directories''命令,以便它工作。如果不是的话,你需要将代码发布到某个地方,以便有人可以查看它,并确切地知道发生了什么问题。 – Phil