2010-07-11 366 views
12

这里是我的简单的CMakeLists.txt文件:set_target_properties调用的参数数量不正确?

include_directories (${CMAKE_SOURCE_DIR}/common) 
find_package(Threads) 

add_library (libusbmuxd SHARED libusbmuxd.c sock_stuff.c ${CMAKE_SOURCE_DIR}/common/utils.c) 
find_library (PTHREAD pthread) 
target_link_libraries (libusbmuxd ${CMAKE_THREAD_LIBS_INIT}) 

# 'lib' is a UNIXism, the proper CMake target is usbmuxd 
# But we can't use that due to the conflict with the usbmuxd daemon, 
# so instead change the library output base name to usbmuxd here 
set_target_properties(libusbmuxd PROPERTIES OUTPUT_NAME usbmuxd) 
set_target_properties(libusbmuxd PROPERTIES VERSION ${LIBUSBMUXD_VERSION}) 
set_target_properties(libusbmuxd PROPERTIES SOVERSION ${LIBUSBMUXD_SOVERSION}) 

install(TARGETS libusbmuxd 
    ARCHIVE DESTINATION lib${LIB_SUFFIX} 
    LIBRARY DESTINATION lib${LIB_SUFFIX} 
) 
install(FILES usbmuxd.h usbmuxd-proto.h DESTINATION include) 

这给了我一个错误:
CMake error at CMakeLists.txt:12 (set_target_properties):
set_target_properties called with incorrect number of arguments

CMake error at CMakeLists.txt:13 (set_target_properties):
set_target_properties called with incorrect number of arguments
这些是第二和第三set_target_properties。第一个set_target_properties从来没有这个问题?
(如果你还没有已经意识到,我正在试图建立usbmuxd-1.0.4)

回答

29

SET_TARGET_PROPERTIES的格式为:

SET_TARGET_PROPERTIES(
    target1 target2 ... targetM 
    PROPERTIES 
    prop1 val1 prop2 val2 ... propN valN 
) 

的原因吗?问题是你的变量LIBUSBMUXD_VERSION和LIBUSBMUXD_SOVERSION是不确定的,所以你的命令的语法是:

SET_TARGET_PROPERTIES(target PROPERTIES name) 

相反的:

SET_TARGET_PROPERTIES(target PROPERTIES name value) 

要解决此问题,请尝试引用变量;使用“$ {LIBUSBMUXD_SOVERSION}”应该确保它接受空字符串的值,即使变量未定义也是如此,从而遵守语法。

+2

最后一句话正是解决了我的问题。不幸的是,我只能提出一次答案。谢谢! – ollo 2013-03-06 21:38:50

+0

我可以将一个列表作为值吗?立即,你会如何设置带有多个标志的LINKER_FLAG? – Royi 2018-02-21 00:29:30

相关问题