我正在尝试使用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来完成。
答案 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
查看正在执行的命令。