我正在尝试构建一个包含单个bash脚本的debian包。该脚本由以下人员生成:
go.sh
:
#!/bin/bash
cat >main <<EOF
#!/bin/bash
echo $@
EOF
chmod +x main
和我的CMakeLists.txt
:
cmake_minimum_required(VERSION 3.5)
add_custom_command(OUTPUT main ${CMAKE_CURRENT_SOURCE_DIR}/go.sh ${PROJECT_NAME})
add_custom_target(main ALL)
install(
TARGETS main
DESTINATION /usr/local/lib/
)
set(CPACK_GENERATOR "DEB")
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Me")
include(CPack)
这只是给我一个神秘的错误信息:
CMake Error at CMakeLists.txt:7 (install):
install TARGETS given target "main" which is not an executable, library, or
module.
是否有人知道此错误消息的含义,以及我应该怎么做?
编辑 - 我迷失了。我已将go.sh
生成的脚本重命名为program
,以便它不会与应该生成该文件的目标名称冲突:< / p>
#!/bin/bash
MAIN=program
cat >$MAIN <<EOF
#!/bin/bash
echo $@
EOF
chmod 'x $MAIN
我还更改了我的CMakeLists.txt
文件:
cmake_minimum_required(VERSION 3.5)
add_custom_target(
main
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/program
)
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/program
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/go.sh ${PROJECT_NAME}
)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/program DESTINATION /usr/local/lib/)
set(CPACK_GENERATOR "DEB")
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Me")
include(CPack)
但是,我的构建仍然无法正常工作。在这种情况下,我的main
目标无法构建。如果我跑:
rm -rf ./* && cmake .. && make package
我收到有关file INSTALL cannot find program
我认为我从根本上误解了文件和目标之间的区别。我无法想象,使用cmake
,一个人应该为每个生成的文件命名,然后为每个生成的文件提供一个不同的目标名称,以避开命名冲突。这对我没有任何意义。
答案 0 :(得分:1)
命令流install(TARGETS)
仅适用于使用add_executable()
或add_library()
创建的目标。
对于使用自定义目标构建的文件,请使用install(FILES)
:
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/main DESTINATION /usr/local/lib/)
答案 1 :(得分:1)
@ tsyvarev的回答指出了你正确的方向,你编辑的问题几乎是正确的。您遗漏了add_custom_target()
main
选项,这就是为什么您的CMakeLists.txt
目标默认情况下无法构建的原因。更正您的cmake_minimum_required(VERSION 3.5)
add_custom_target(
main ALL
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/program
)
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/program
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/go.sh ${PROJECT_NAME}
)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/program DESTINATION /usr/local/lib/)
set(CPACK_GENERATOR "DEB")
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Me")
include(CPack)
文件以解决此问题,以下内容应符合您的要求:
var myMessage = new SendGridMessage();
myMessage.AddTo(message.Destination);
myMessage.From = new MailAddress("you@somewhere.com", "My name");//here the error Happens
myMessage.Subject = message.Subject;
myMessage.PlainTextContent = message.Body;
myMessage.HtmlContent= message.Body;
这是一个非常标准的CMake模式,有一个自定义命令创建一个文件,一个自定义目标依赖它,以便可以根据需要触发它。
答案 2 :(得分:0)
修正了它。我不得不将add_custom_command
折叠到add_custom_target
:
cmake_minimum_required(VERSION 3.5)
add_custom_target(
main ALL
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/go.sh ${PROJECT_NAME}
)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/main DESTINATION /usr/local/bin/)
set(CPACK_GENERATOR "DEB")
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Me")
include(CPack)