Scott Amort wrote:
Hi Brad,
Thanks for the quick response.
Brad King wrote:
What is the output value of "antlr-config --libs"? What is the command
you are using to store the value in the cache?
The output value is: /usr/lib64/libantlr.a on my AMD64 gentoo box. I'm
not doing anything specific re: cache, here are the exact commands:
FIND_PROGRAM(ANTLR_CONFIG
antlr-config
/usr/bin
/usr/local/bin
)
IF(ANTLR_CONFIG)
EXECUTE_PROCESS(COMMAND ${ANTLR_CONFIG} --libs OUTPUT_VARIABLE
ANTLR_CONFIG_LIBS)
ENDIF(ANTLR_CONFIG)
...and later in a subdirectory's CMakeLists.txt,
TARGET_LINK_LIBRARIES(mylibrary ${ANTLR_CONFIG_LIBS})
If I output ANTLR_CONFIG_LIBS to a status message, it seems to throw an
end-of-line character into the output, which seems to be confusing the
cache used by TARGET_LINK_LIBRARIES. It is the TARGET_LINK_LIBRARIES
that causes the actual problem, if I comment it out, everything works fine.
The actual error comes after a successful `cmake .', followed by `make':
CMake Error: Parse error in cache file (...)CMakeCache.txt. Offending
entry: ;
Here are the offending lines in CMakeCache.txt:
//Dependencies for the target
mylibrary_LIB_DEPENDS:STATIC=/usr/lib64/libantlr.a
;
I'm guessing the ; separator shouldn't be on a newline.
As a bit of experimentation, I discovered that by replacing the
EXECUTE_PROCESS with:
EXEC_PROGRAM(${ANTLR_CONFIG} ARGS --libs OUTPUT_VARIABLE ANTLR_CONFIG_LIBS)
The problem is fixed. No end-of-line appears in ANTLR_CONFIG_LIBS (or
CMakeCache.txt), and the TARGET_LINK_LIBRARIES works just fine.
Perhaps a bug?
No, EXEC_PROGRAM and EXECUTE_PROCESS have different policies for
capturing the output of a program. It looks like EXEC_PROGRAM
automatically strips leading and trailing whitespace from the output,
while EXECUTE_PROCESS gives you the real output of the program.
Try putting this after EXECUTE_PROCESS:
STRING(REGEX REPLACE "[\r\n]+$" "" ANTLR_CONFIG_LIBS "${ANTLR_CONFIG_LIBS}")
-Brad
_______________________________________________
CMake mailing list
[email protected]
http://www.cmake.org/mailman/listinfo/cmake