如何正确使用GLOB文件?

时间:2016-11-05 14:15:37

标签: c++ makefile cmake

我正在尝试使用GLOB_RECURSE来指定我的源文件和头文件。目前,我的静态库的CMakeLists.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_BUILD_TYPE=Debug时(在构建目录中)一切正常。然而,命令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来完成。

2 个答案:

答案 0 :(得分:2)

我解决了我的问题,这是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文件。我这样做是因为否则,Visual Studio(或CodeBlocks)不会创建一个" Header Files"项目菜单上的文件夹。

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

${CMAKE_SOURCE_DIR}/${PROJECT_NAME}/source/ 

答案 1 :(得分:0)

您需要添加

Fixpoint act (t : Tperm) (i : nat) : nat := match t with
|nil => i
|cons(k,l) p => if(beq_nat(act p i) k) then l
                  else if(beq_nat(act p i) l) then k
                  else act p i
end.

Fixpoint atoms (t : Tperm) : list(nat) :=
match t with
  |nil => nil
  |cons(k,l) nil => cons k (cons l nil)
  |cons(k,l) p => cons k (atoms p)
end.

所以在编译步骤中添加了正确的target_include_directories(${PROJECT_NAME} PUBLIC ${PROJECT_SOURCE_DIR}) 参数。使用-I查看正在执行的命令。

相关问题