<html><head><style type="text/css"><!-- DIV {margin:0px;} --></style></head><body><div style="font-family:times new roman,new york,times,serif;font-size:12pt"><div>Hello,<br><br>I am getting compilation informations for third-party libs using pkg_config:<br>INCLUDE(FindPkgConfig)<br>PKG_CHECK_MODULES(MatrixAbstractLayer REQUIRED ${_MatrixAbstractLayer_REQUIRED})<br>MESSAGE("CFlags: ${MatrixAbstractLayer_CFLAGS}") <br><br>If more than one cflags are necessary for the third-party, the flags are returned in a list (ie separated with semicolon and not with with spaces). For example, under linux, the previous code will display<br>CFlags: -DNDEBUG;-D_BOOST_;-I/usr/local/4.2.4/include;-I/usr/include/boost-sandbox<br><br>Then, these flags have to be used for compilation. I have to affect them to a particular target, ie using set_target_properties. I am not able to find the proper way to specify the arguments.<br>One solution is to give directly the list as
 argument, example:<br>SET_TARGET_PROPERTIES(${${PROJECT_NAME}_INTERN_LIBS} <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PROPERTIES COMPILE_FLAGS ${MatrixAbstractLayer_CFLAGS})<br>However, when ${MatrixAbstractLayer_CFLAGS} contains more than one flag, this syntax is not accepted by set_target_properties:<br>CMake Error at src/CMakeLists.txt:83 (SET_TARGET_PROPERTIES):<br>&nbsp; set_target_properties called with incorrect number of arguments.<br><br>Another solution is to encapsulated the flags with ""<br>SET_TARGET_PROPERTIES(${${PROJECT_NAME}_INTERN_LIBS} <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PROPERTIES COMPILE_FLAGS "${MatrixAbstractLayer_CFLAGS}")<br>Ok, this is considered as one single arguments, but with semicolon inside, which will definitely not correspond to the syntax of the compiler. Under linux, this will produces the following compiler execution<br>cd /home/nmansard/src/reforge/StackOfTasks/build/src &amp;&amp; /usr/bin/c++&nbsp;&nbsp;&nbsp; -Dsot_0_EXPORTS -Wall -DNDEBUG -DWITH_OPENHRP -O3 -fPIC -I/home/nmansard/src/reforge/StackOfTasks/build/include -I/usr/include/boost-sandbox&nbsp;&nbsp; -DNDEBUG;-D_BOOST_;-I/usr/local/4.2.4/include;-I/usr/include/boost-sandbox -o CMakeFiles/sot-0.dir/debug/sotDebug.cpp.o -c /home/nmansard/src/reforge/StackOfTasks/src/debug/sotDebug.cpp<br>c++: no input files<br>/bin/sh: -D_BOOST_: not found<br>Note the ";" that separated the arguments of g++. I guess that a similar problem would occurs on
 MSVC++<br><br>A last solution is to manually parse the args list to a string:<br>set(libsotcf "")<br>foreach(cf ${_MatrixAbstractLayer_CFLAGS})<br>&nbsp; set(libsotcf "${libsotcf} ${cf}")<br>endforeach(cf)<br>Cumbersome ... Isn't there any alternative more straitforward solution?<br><br>I found some references to that problem on the www, but no answer. EG:<br><span><a target="_blank" href="http://www.mail-archive.com/playerstage-commit@lists.sourceforge.net/msg02935.html">http://www.mail-archive.com/playerstage-commit@lists.sourceforge.net/msg02935.html</a></span><br><span><a target="_blank" href="http://svn.apache.org/repos/asf/qpid/trunk/qpid/cpp/src/ssl.cmake">http://svn.apache.org/repos/asf/qpid/trunk/qpid/cpp/src/ssl.cmake</a></span><br><br>Additionaly, this is link to the use of LIST(APPEND VAR "args"), which is recommended here (second paragraph <span class="mw-headline">Use LIST(APPEND ...)</span>).<br><span><a target="_blank"
 href="http://www.vtk.org/Wiki/CMake_Performance_Tips">http://www.vtk.org/Wiki/CMake_Performance_Tips</a></span><br>Similarly, the result of such a concatenation will not be admissible for set_target_properties.<br><br>Thanks for the help.<br>Nico<br></div></div><br>



      </body></html>