例如,我怎么知道我的可执行目标E是否依赖于我的库目标L?
让我们的图像E取决于L1和L2,但我不知道它们是否依赖于L.
target_link_libraries(E L1 L2)
我想在调用target_link_libraries之前从cmake本身获取列表,这样如果我检测到E依赖于两个不兼容的库,我可以做一些技巧.我玩了一些GetPrerequisites,但是这找到了对磁盘上现有库的依赖性,而不是正在构建的目标库.
谢谢
在CMake中,我似乎无法在../out/library中输出我的库,只有库.当我执行../out/library路径时,它告诉我它找不到库,就好像它想链接到它一样.
add_library(../out/JE3D ../source/CDeviceLayerSDL.cpp)
Run Code Online (Sandbox Code Playgroud)
有更多的文件,我只是在节省空间.当我这样做时,我得到了这个错误.
链接CXX静态库lib ../ out/JE3D.a/usr/bin/ar:lib ../ out/JE3D.a:没有这样的文件或目录make [2]:*[lib ../ out/JE3D. a]错误1 make [1]:* [CMakeFiles /../ out/JE3D.dir/all]错误2 make:***[all]错误2
我正在尝试将cmake生成的所有二进制文件复制到特定目录.我不想使用EXECUTABLE_OUTPUT_PATH,将它们保留在构建树中,使开发更容易.
所以我使用add_custom_command添加后期构建副本
# set the final binary dir
set(PROJECT_BINARY_DIR ${PROJECT_SOURCE_DIR}/bin)
# get name and location of binary, namecan change with os (cf. ".exe" suffix on windows)
GET_TARGET_PROPERTY(EXAMPLE_BIN_NAME example LOCATION)
# copy bin to binary folder
ADD_CUSTOM_COMMAND(TARGET example
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${EXAMPLE_BIN_NAME} ${PROJECT_BINARY_DIR}/.
)
Run Code Online (Sandbox Code Playgroud)
问题是,在第一次构建时,"bin"文件夹不存在(复制失败),但刚刚创建"bin"文件夹.所以在第二次构建时副本有效.
有没有办法让自定义命令创建bin文件夹然后复制二进制文件?或者有可能有两个EXECUTABLE_OUTPUT_PATH与cmake?
谢谢 !
使用CMake,我如何获得进入可执行目标的所有源文件的列表,包括此可执行文件所依赖的所有目标中的所有源?
我们在代码库中有一个模式,其中初始化调用者是由构建系统根据源树中的文件名和路径生成的.因此,我需要可执行目标所依赖的所有源文件的完整路径(或相对于源根目录).
我们已经设置了一个具有外部共享库依赖项的cmake项目.我们想使用CPack打包项目的二进制文件和依赖项.但是,当我们尝试查找目标的依赖关系时,我们在Windows和Linux系统上获得了不同的结果.
我们看了一下CMake的GetPrerequisites模块(2.8.12).我们已成功使用以下CMake代码在linux上获取CMake目标(BINARY)依赖(_libFile)的完整路径,但是我们没有得到Windows依赖的完整路径.在Windows上,变量dependency_realpath保存类似于$ {CMAKE_SOURCE_DIR}/DEPENDENCY_FILE的内容,这不是依赖项的正确路径.
string(TOUPPER "${CMAKE_BUILD_TYPE}" CONFIG)
GET_TARGET_PROPERTY(MY_BINARY_LOCATION ${BINARY} LOCATION_${CONFIG} )
GET_PREREQUISITES(${MY_BINARY_LOCATION} DEPENDENCIES 0 0 "" "")
foreach( DEPENDENCY_FILE ${DEPENDENCIES})
get_filename_component( dependency_realpath ${DEPENDENCY_FILE} REALPATH)
Run Code Online (Sandbox Code Playgroud)
所以问题是:为什么我们在Windows和Linux上获得不同的依赖位置结果?
在CMake中,是否可以以编程方式检索将用于给定目标的链接器标志的完整列表?我看到的唯一方法是检查link.txt目标CMakeFiles目录中的文件。不理想。
我感兴趣的用例是收集数据,以将其包含在pkg-config文件之类的文件中。我正在编写一个库,它包括几个使用该库的可执行实用程序。构建可执行文件(尤其是在静态构建库时)需要一条非平凡的链接行来链接到我的库及其依赖项。因此,我想写出将这些可执行文件构建到包中包含的数据文件中所需的链接行,以便其他客户端可以知道如何链接。
cmake ×6