gpt4 book ai didi

linux - CMake忽略自定义命令中的变量

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:36:53 27 4
gpt4 key购买 nike

免责声明:我是新手。

我有以下 CMakeLists.txt 文件:

cmake_minimum_required( VERSION 2.8.10.2 )
project( widget )

# gleaned from the original makefile
add_definitions( -DPJ_IS_BIG_ENDIAN=0 )
add_definitions( -DPJ_IS_LITTLE_ENDIAN=1 )
add_definitions( -DPJ_AUTOCONF=1 )

SET ( SRC_PATH ${CMAKE_CURRENT_SOURCE_DIR}/src/pj )
SET ( sources ${SRC_PATH}/addr_resolv_sock.c
${SRC_PATH}/file_access_unistd.c
${SRC_PATH}/file_io_ansi.c
${SRC_PATH}/guid_simple.c
${SRC_PATH}/log_writer_stdout.c
${SRC_PATH}/os_core_unix.c
${SRC_PATH}/os_error_unix.c
${SRC_PATH}/os_time_unix.c
${SRC_PATH}/os_timestamp_common.c
${SRC_PATH}/os_timestamp_posix.c
${SRC_PATH}/pool_policy_malloc.c
${SRC_PATH}/sock_bsd.c
${SRC_PATH}/sock_select.c
)

SET( outpath ${CMAKE_CURRENT_LIST_DIR} "/lib/" )
message(" outpath = " ${outpath} )

include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/include )

add_library( pj ${sources} )

ADD_CUSTOM_COMMAND( TARGET pj POST_BUILD
COMMAND ${CMAKE_COMMAND} -E echo "what now?"
COMMAND ${CMAKE_COMMAND} -E copy libpj.a "$outpath"
)

并且由于某些原因,复制命令中$outpath 的值被忽略了。如果我输入一个硬编码的字符串,例如“bubba”,它就可以工作。如果我将 $outpath 设置为“bubba”,它就不起作用。

我已经尝试了所有已知的 $outpath 变体 -- ${outpath}, "$outpath", "$ {出路}”...但没有工作。

这对你来说一定是显而易见的,但我看不到。
感谢所有帮助!

:bp:

最佳答案

第一个问题是outpath 的值。您应该避免在 set 中留下空格命令,因为这会将值解释为两个单独的条目,第一个是 ${CMAKE_CURRENT_LIST_DIR},第二个是 /lib/

另一个问题就是使用add_custom_command。 .您应该喜欢在这里使用“生成器表达式”。来自文档:

Arguments to COMMAND may use "generator expressions" with the syntax "$<...>". Generator expressions are evaluated during build system generation to produce information specific to each build configuration.

此外,如果目标是一个目录(在本例中是目录),则需要在调用 cmake -E copy 之前创建“/lib”目录。

最后,一个小的优化是使用 cmake -E copy_if_different 而不是 copy

总而言之,您需要执行以下操作:

set( outpath "${CMAKE_CURRENT_LIST_DIR}/lib" )
...
add_custom_command( TARGET pj POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory ${outpath}
COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:pj> ${outpath}
)

关于linux - CMake忽略自定义命令中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16326927/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com